LINQ基础之From和GroupBy子句
FROM子句
一、简单FROM子句
获取数据源:
var queryAllCustomers = from cust in Customers select cust;
分析:
查询表达式必须以from子句开头
例子中cust是范围变量,范围变量类似于foreach循环中的迭代变量,但在查询表达式中,实际上不发生迭代。执行查询时,范围变量将用作对Customers中的每个后续元素的引用。因为编译器可以推断cust的类型,所以不必显示指定此类型。
Customers是数据源,实现了IEnumerable或IEnumerable(T)或其派生接口的
二、复合FROM子句
查询出成绩有90分以上的学生,得到他们的名字和成绩
//数据源 IList<Student> students = new List<Student> { new Student{ Name="Kevin", Score=new List<int>{89,93,88,78}}, new Student{ Name="Jackie",Score=new List<int>{92,87,83,91}}, new Student{ Name="Helen",Score=new List<int>{53,76,72,62}} }; //所有的Linq查询操作都由以下三个不同的操作组成: //1.获得数据源 //2.创建查询 //3.执行查询 //使用复合from子句查询命令 var getStudent = from student in students from score in student.Score where score > 90 select new { Name = student.Name, Score = score }; foreach (var st in getStudent) { Console.WriteLine("NAME:{0},SCORE:{1}",st.Name,st.Score); }
分析:
我们可以看到学生对象中有个Score属性,Score属性本身就是List集合,这时候我们就要用到复合from子句进行查询了。首先遍历学生对象集合中的每个学生对象,然后在用另一个from子句,对每个学生对象中的Score属性进行遍历,筛选出含有90分以上的学生信息进行返回。
GroupBy子句
一、简介
group子句返回一个IGrouping(T Key,T element)对象序列,编译时,group子句被转换成对GroupBy方法的调用。
二、案例
案例一:
根据首字母分组,并打印到控制台
//数据源 string[] fruits = { "apple", "banana", "peach", "orange", "melon", "lemon" }; //分组查询的查询语句 var query = from f in fruits group f by f[0]; //执行查询 foreach (var letters in query) { Console.WriteLine("words that start with letter:" + letters.Key); foreach (var word in letters) { Console.WriteLine(word); } }
分析:
首先遍历字符串数组中的每个字符串,然后根据每个字符串的首字母进行分组,返回结果.
案例二:
var query = from f in fruits group f by f[0] into g where g.Key == 'p' || g.Key == 'b' select g;
分析:
如果您想要对每个组执行附加查询操作,则可以使用into上下文关键字指定一个临时标识符。使用into时,必须继续编写该查询,并最终用一个select语句或另一个group子句结束该查询。
案例三:
string[] strs = { "胡广成", "张国荣", "刘德华", "故国冰封", "万里雪飘", "AAA", "胡翰轩", "张杰" }; var list5 = strs //.Where(a => a.Length == 3) .Select(item => item) .GroupBy(item => item.Length);//分组 分组依据是字符串的长度 foreach (var item in list5) { Console.WriteLine("----------------"); Console.WriteLine($"分组字段是{item.Key}"); //item.Key是分组依据 显示分组字段 foreach (var items in item)//内层循环遍历分组项 { Console.WriteLine(items); } }
分析:
按照名字的长度进行分组显示。
三、多字段分组示例
GroupBy(x => new { x.a , x.b, x.c }).Select( x=> ( new Class名 { a=x.Key.a , b=x.Key.b , c = x.Key.c } ))
到此这篇关于LINQ使用From和GroupBy子句的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)