欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

LINQ基础之From和GroupBy子句

时间:2022-06-03 11:08:47|栏目:.NET代码|点击:

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 } ))

上一篇:基于C#设计一个双色球选号工具

栏    目:.NET代码

下一篇:ASP.NET Core MVC中过滤器工作原理介绍

本文标题:LINQ基础之From和GroupBy子句

本文地址:http://www.codeinn.net/misctech/203601.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有