猿教程 Logo

LINQ查询示例

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

在本节中,您将学习一些复杂的LINQ查询。 我们将使用以下学生和标准集合来查询。

相关实例:

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", Age = 18, StandardID = 1 } ,
    new Student() { StudentID = 2, StudentName = "Steve",  Age = 21, StandardID = 1 } ,
    new Student() { StudentID = 3, StudentName = "Bill",  Age = 18, StandardID = 2 } ,
    new Student() { StudentID = 4, StudentName = "Ram" , Age = 20, StandardID = 2 } ,
    new Student() { StudentID = 5, StudentName = "Ron" , Age = 21 } 
};

IList<Standard> standardList = new List<Standard>() { 
    new Standard(){ StandardID = 1, StandardName="Standard 1"},
    new Standard(){ StandardID = 2, StandardName="Standard 2"},
    new Standard(){ StandardID = 3, StandardName="Standard 3"}
};

多个Select和Where操作符

相关实例:

var studentNames = studentList.Where(s => s.Age > 18)
                              .Select(s => s)
                              .Where(st => st.StandardID > 0)
                              .Select(s => s.StudentName);

运行结果:

Steve 
Ram

以下查询返回只有StudentName属性的匿名对象的枚举:

相关实例:

var teenStudentsName = from s in studentList
                       where s.age > 12 && s.age < 20
                       select new { StudentName = s.StudentName };

teenStudentsName.ToList().ForEach(s => Console.WriteLine(s.StudentName));

运行结果:

John 
Bill

分组:

以下查询按标准ID返回列表学生组:

相关实例:

var studentsGroupByStandard = from s in studentList
                              group s by s.StandardID into sg
                              orderby sg.Key 
                                    select new { sg.Key, sg };


foreach (var group in studentsGroupByStandard)
{
    Console.WriteLine("StandardID {0}:", group.Key);
    
    group.sg.ToList().ForEach(st => Console.WriteLine(st.StudentName ));
}

运行结果:

StandardID 0: 
Ron 
StandardID 1: 
John 
Steve 
StandardID 2: 
Bill 
Ram

输出包括没有任何StandardID的Ron。 所以Ron属于标准ID 0。

要删除没有StandardID的学生,请在组运算符之前使用where运算符:

相关实例:

var studentsGroupByStandard = from s in studentList
                              where s.StandardID > 0
                              group s by s.StandardID into sg
                              orderby sg.Key 
                                    select new { sg.Key, sg };

运行结果:

StandardID 1: 
John 
Steve 
StandardID 2: 
Bill 
Ram

Left outer join:

使用Left outer join在每个标准下显示学生。 显示标准名称,即使没有学生分配到该标准。

相关实例:

var studentsGroup = from stad in standardList
                    join s in studentList
                    on stad.StandardID equals s.StandardID
                        into sg
                        select new { 
                                        StandardName = stad.StandardName, 
                                        Students = sg 
                                    };

foreach (var group in studentsGroup)
{
    Console.WriteLine(group.StandardName);
    
    group.Students.ToList().ForEach(st => Console.WriteLine(st.StudentName));
}

运行结果:

Standard 1: 
John 
Steve 
Standard 2: 
Bill 
Ram 
Standard 3:

在下面的group by query示例中,我们对组进行排序,并仅选择StudentName:

相关实例:

var studentsWithStandard = from stad in standardList
                           join s in studentList
                           on stad.StandardID equals s.StandardID
                           into sg
                               from std_grp in sg 
                               orderby stad.StandardName, std_grp.StudentName 
                               select new { 
                                                StudentName = std_grp.StudentName, 
                                                StandardName = stad.StandardName 
                                };


foreach (var group in studentsWithStandard)
{
    Console.WriteLine("{0} is in {1}", group.StudentName, group.StandardName);
}

运行结果:

John is in Standard 1 
Steve is in Standard 1 
Bill is in Standard 2 
Ram is in Standard 2

排序:

以下查询按照StandardID和Age的升序返回学生列表。

相关实例:

var sortedStudents = from s in studentList
                        orderby s.StandardID, s.age
                        select new { 
                                StudentName = s.StudentName, 
                                Age = s.age, 
                                StandardID = s.StandardID };

sortedStudents.ToList().ForEach(s => Console.WriteLine("Student Name: {0}, Age: {1}, StandardID: {2}", s.StudentName, s.Age , s.StandardID));

运行结果:

Student Name: Ron, Age: 21, StandardID: 0 
Student Name: John, Age: 18, StandardID: 1 
Student Name: Steve, Age: 21, StandardID: 1 
Student Name: Bill, Age: 18, StandardID: 2 
Student Name: Ram, Age: 20, StandardID: 2

内部联接:

相关实例:

var studentWithStandard = from s in studentList
                          join stad in standardList
                          on s.StandardID equals stad.StandardID 
                          select new { 
                                  StudentName = s.StudentName, 
                                  StandardName = stad.StandardName 
                              };

studentWithStandard.ToList().ForEach(s => Console.WriteLine("{0} is in {1}", s.StudentName, s.StandardName  ));

运行结果:

John is in Standard 1 
Steve is in Standard 1 
Bill is in Standard 2 
Ram is in Standard 2

嵌套查询:

相关实例:

var nestedQueries = from s in studentList
                    where s.age > 18 && s.StandardID == 
                        (from std in standardList
                        where std.StandardName == "Standard 1"
                        select std.StandardID).FirstOrDefault()
                            select s;

nestedQueries.ToList().ForEach(s => Console.WriteLine(s.StudentName));

运行结果:

Steve
阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Linq/sample-linq-queries.html