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)

相关推荐

  • linq中的限定操作符

    限定操作符运算返回一个Boolean值,该值指示序列中是否有一些元素满足条件或者是否所有元素都满足条件. 一.All操作符 All方法用来确定是否序列中的所有元素都满足条件.看下面的例子: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LimitOperation { class Progra

  • linq中的元素操作符

    目录 一.Fitst操作符 二.FirstOrDefault操作符 三.Last操作符 四.LastOrDefault操作符 五.ElementAt操作符 六:ElementAtOrDefault操作符 七.Single操作符 1.序列包含多个元素 2.序列中不包含任何元素. 八.SingleOrDefault操作符 1.序列包含多个元素 2.序列不包含任何元素 元素操作符仅返回一个元素. 一.Fitst操作符 First操作符将返回序列中的第一个元素.如果序列中不包含任何元素,则First<T

  • linq中的聚合操作符

    目录 一.Aggregate操作符 二.Average操作符 1.直接求基本类型集合的平均值 2.求listProduct集合中价格的平均值 三.Count操作符 四.LongCount操作符 五.Max操作符 六.Min操作符 七.Sum操作符 一.Aggregate操作符 Aggregate操作符对集合值执行自定义聚合运算.来看看Aggregate的定义: public static TSource Aggregate<TSource>(this IEnumerable<TSourc

  • c#中LINQ的基本用法(一)

    LINQ(Language Integrated Query,语言集成查询),在C#语言中集成了查询语法,可以用相同的语法访问不同的数据源.LINQ提供了不同数据源的抽象层,所以可以使用相同的语法.这里主要介绍LINQ的核心原理和C#中支持C# LINQ查询的语言扩展. 1.语法 使用LINQ查询出来自巴西的所以世界冠军.这里可以使用List<T>类的FindAll()方法,但使用LINQ查询语法更简单 static void LINQQuery() { // var query = from

  • linq中的连接操作符

    linq中的连接操作符主要包括Join()和GroupJoin()两个. 一.Join()操作符 Join()操作符非常类似于T-SQL中的inner join,它将两个数据源进行连接,根据两个数据源中相等的值进行匹配.例如:可以将产品表和产品类别表进行连接,得到产品名称和与其对应的类型名称.下面看看Join()方法的定义: public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IEn

  • c#中LINQ的基本用法(二)

    目录 1.筛选 2.用索引筛选 3.类型筛选 4.复合的from子句 5.排序 6.分组 7.对嵌套的对象分组 8.内连接 9.左连接 10.组连接 11.集合操作 12.合并 13.分区 14.聚合操作符 15.转换操作符 16.生成操作符 本文主要介绍LINQ查询操作符 LINQ查询为最常用的操作符定义了一个声明语法.还有许多查询操作符可用于Enumerable类.下面的例子需要用到LINQ基础(一)(https://www.jb51.net/article/244208.htm)的一些代码

  • linq中的转换操作符

    这些转换操作符将集合转换成数组:IEnumerable.IList.IDictionary等.转换操作符是用来实现将输入对象的类型转变为序列的功能.名称以"As"开头的转换方法可更改源集合的静态类型但不枚举(延迟加载)此源集合.名称以"To"开头的方法可枚举(即时加载)源集合并将项放入相应的集合类型. 一.AsEnumerable操作符 所有实现了IEnumerable<T>接口的类型都可以调用此方法来获取一个IEnumerable<T>集合

  • linq中的串联操作符

    串联是一个将两个集合连接在一起的过程.在Linq中,这个过程通过Concat操作符实现.Concat操作符用于连接两个集合,生成一个新的集合.来看看Concat操作符的定义: public static IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) 从方法定义中可以看出:第二个参数为输入一个新的集合,与调用集

  • linq中的分组操作符

    分组是根据一个特定的值将序列中的元素进行分组.LINQ只包含一个分组操作符:GroupBy.GroupBy操作符类似于T-SQL语言中的Group By语句.来看看GroupBy的方法定义: public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey>

  • c#中LINQ的基本用法(三)

    一.并行LINQ System.Linq名称空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上.尽管Enumerable类给IEnumerable<T>接口定义了扩展方法,但ParallelEnumerable类的大多数扩展方法是ParallerQuery<TSource>类的扩展.例如,AsParallel()方法,它扩展了IEnumerable<T>接口,返回ParallelQuery<T>类,所以正常的集合类可以

  • linq中的分区操作符

    Linq中的分区指的是在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中一个部分的操作. 一.Take操作符 Take(int n)表示将从序列的开头返回数量为n的连续元素,常用于分页.其定义如下: public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, int count); 该方法只接受一个整数,表示要返回的结果的数量. 看下面的例子: usin

随机推荐