首页
学习
活动
专区
圈层
工具
发布

了解LINQ

本文主要的是泛谈LINQ是啥?以及常见的用法大纲如下: LINQ的那些根基 LINQ的一些基本用法 LINQ的根基 IEnumerable和IEnumerator 为啥能够被foreach?...实际上,能够被foreach的对象,一定是实现了带有返回值的IEnumerator的GetEnumerator()方法的接口,而.NET内置的该接口则是IEnumerable,一般指的是IEnumerable...: Cat Dog Pig ----------- Cat Dog Pig 而能被LINQ的对象就是一个实现了IEnumerable的可被枚举的集合 LINQ的基本用法 扩展方法在LINQ的应用:LINQ...").Select(t=>t.ToUpper()).ToList(); result.ForEach(t =>Console.WriteLine(t)); 输出结果: CAT DOG LINQ的查询表达式..." or "Dog" select t.ToUpper()).ToList(); result.ForEach(t => Console.WriteLine(t)); 输出结果也是一样的

1.4K20

C#内建接口:IQueryable

这节来讲一下C#中的内建接口:IQueryable 。 IQueryable是 IEnumerable 接口的子接口,相比之下提供了更丰富的查询功能。...其主要用于 LINQ(Language Integrated Query)查询,它允许我们在编写类型安全的查询表达式时,将查询操作推迟到实际执行查询的时候,以便进行更有效的查询优化。...因为我们在构建查询之后修改了 numbers 数组,查询仍然反映了修改后的结果。这是因为查询的执行被延迟到了我们需要结果的时候。...除了使用Foreach,实际上我们还可以使用Linq提供的ToList()方法即刻得到结果(当然ToList以后,它的返回值已不再可被查询,而是变成了IEnumable,即,可被枚举)。...历史文章: C#内建接口:IEnumerable C#内建接口:IEquatable泛型

81610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在VS中调试LINQ(Lambda)

    对于Linq to object,当集合对象是 IEnumerable 时,是延迟执行的。只有结果被用到时,才会进行迭代。所以如果在实际执行前,集合数据发生改变会导致结果集和预期不符。...对于Linq to object,当集合对象是 IEnumerable 时,对单个对象进行迭代的方式是:先把单个对象走完所有的Linq方法后,直到最后或者执行到返回值不是IEnumerable的Linq...所有的对象迭代完毕后,会有一个临时的结果集(非IEnumerable),然后把这个结果集重复前面的步骤,直至结束。...IEnumerable.AsQueryable().AsEnumerable()是没问题的,遵循IEnumerable的正常流程:断点不会转移,仍然是延迟执行。...使用OzCode VS插件OzCode很强大,每一个Linq语句的执行结果都能统计并展示出来,详情参考:如何在C#中调试LINQ查询 和 如何在C#中调试LINQ查询 使用LinqPad LinqPad

    6.3K30

    .NET面试题系列 - LINQ to SQL与IQueryable

    名言警句 "理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。" - Jon Skeet LINQ to Object和LINQ to SQL有何区别?...LINQ to Object的数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对的,LINQ to SQL的数据源总是实现IQueryable<...IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。 IQueryable是一个继承了IEnumerable接口的另一个接口。...AsQueryable方法将IEnumerable转换为IQueryable。...int> seq3 = seq.Where(o => o > 4).AsQueryable(); 模拟接口实现一个简单的LINQ to SQL 下面试图实现一个非常简单的查询提供器(即LINQ to xxx

    2.2K10

    .NET面试题系列 - LINQ:性能

    你确定你会遍历整个序列多于一次的时候 如果序列不是很大的时候(因为ToList / ToArray / ToDictionary等方法将会在堆上分配一个序列对象) 是否返回IEnumerable...注意当你返回IEnumerable时,你并没有开始遍历这个序列(只有当你强制LINQ执行时,才会执行这个返回IEnumerable的方法)。...LINQ VS Foreach(重复极其多次运行相同的LINQ语句) 在什么情况下,LINQ反而不如Foreach表现好?两者的性能差距是怎样的?...LINQ VS PLINQ(重复运行相同的LINQ语句) 显而易见,如果我们重复运行相同的任务,且任务之间又没有什么关系(不需要对结果进行汇总),此时我们可以想到用多线程来解决问题,重复利用系统的资源:...避免过早的ToList,返回IEnumerable/ IQueryable类型的巨大规模的数据。 是否需要重复极其多次运行相同的LINQ语句?考虑使用foreach或者PLINQ来优化性能。

    3.3K40

    C#3.0新增功能09 LINQ 标准查询运算符 04 运算

    03 筛选数据 筛选是指将结果集限制为仅包含满足指定条件的元素的操作。 它也称为选定内容。 下图演示了对字符序列进行筛选的结果。 筛选操作的谓词指定字符必须为“A”。 ?...(C#) 匿名类型 构建联接和叉积查询 join 子句 如何:使用组合键进行联接 如何:联接不同文件的内容 (LINQ) (C#) 如何:对 join 子句的结果进行排序 如何:执行自定义联接操作 如何...标准查询运算符概述 (C#) group 子句 如何:创建嵌套组 如何:按扩展名对文件进行分组 (LINQ) (C#) 如何:对查询结果进行分组 如何:对分组操作执行子查询 如何:使用组将一个文件拆分成多个文件...Enumerable.AsEnumerable AsQueryable 将(泛型)IEnumerable 转换为(泛型)IQueryable。 不适用。...Queryable.AsQueryable Cast 将集合中的元素转换为指定类型。 使用显式类型化的范围变量。

    12.7K20

    LINQ驱动数据的查询功能

    1.1 LINQ VS 循环处理       在我刚工作时候,对于集合对象的处理一般是采用循环这个集合处理,在处理实值类型上这样做效率还行,但是如果集合内是引用类型,使用LINQ就方便的多,例如一个程序要计算课程的总分和平均分...二、LINQ的基础       LINQ本身以IEnumerable两个接口为基础,IEnumerable则负责泛型的集合,目前.NET Framework内的泛型集合类 System.Collection.Generic...命名空间都已实现 IEnumerable,一般来说在.NET内的所有集合对象都能使用LINQ进行处理,如果不引用System.Linq命名空间,所有Linq功能都无法使用。...2.3 类型推论       使用匿名类型在Linq中变量类型无法确定,如果试用IEnumerable就失去强类型的好处,在.NET3.5中只要使用Linq并且以select new来产生结果的查询...IEnumerable selectMany = list1.SelectMany(t=>list2).ToList(); 也可以写成   IEnumerable selectMany

    3.9K90

    .NET深入解析LINQ框架(六:LINQ执行表达式)

    我们都是直接使用LINQ作为查询接口,VS在最后编译的时候负责对LINQ的语法进行解析并且翻译成对应的扩展方法调用。...我们忽视一个重要的环节,就是VS对LINQ进行解析翻译的时候是会执行LINQ表达式的,这点非常重要。...之前我一直以为VS只负责将LINQ的表达式翻译成等价的扩展方法调用,后来发现VS为了满足我们在前期无法确定对象条件的情况下进行Where字句的拼接,允许我们在编写LINQ语句的时候带有逻辑判断表达式在里面...追求优雅代码的同志很不希望在一个既有LINQ查询又带有链式查询的方法中用两种查询方式,如果LINQ能满足大部分的查询功能那最完美; 为了说明LINQ在编译时会被VS执行,我们用LINQPad工具看一下便知...然后我们对最后的SQL进行分析,没有看见任何Where语句,为什么呢?是因为提供程序在内部对表达式进行了执行并分析了我们想要的输出结果,也不知道这样的效果是不是为了满足我们多条件拼接的问题。

    2K10

    .NET 9性能革命:Any()已非昔日吴下阿蒙,选型策略全面更新

    : 灵活但缓慢 适用于所有IEnumerable 有LINQ开销 更受青睐因为可读性更好 开发者们将这些经验教条般地植入代码库: "处理List一定要用Exists()!...LINQ方法内联 JIT编译器现在能积极内联像Any()这样的简单LINQ方法,减少虚方法调用开销,使Any()基础性能更接近直接方法调用。 2....基于Span的优化 改进的Span处理使Any()在可能情况下为数组和列表使用优化路径,避免完整IEnumerable枚举: // .NET 9内部实现示意 public static bool Any...零分配 新的集合API利用ref struct枚举器,消除了常见场景下的堆分配 性能基准测试 让我们看看在.NET 9中的测试设置和结果对比 测试设置: using System; using System.Collections.Generic...现在,让我们切换回.NET 8再次检查结果: .NET 8中Any() vs Exists()基准测试 如我们所见,.NET 8的Any()在所有测试中都明显落后。

    27610

    C# 基础知识系列-7 Linq详解

    前言 在上一篇中简单介绍了Linq的入门级用法,这一篇尝试讲解一些更加深入的使用方法,与前一篇的结构不一样的地方是,这一篇我会先介绍Linq里的支持方法,然后以实际需求为引导,分别以方法链的形式和类SQL...先忽略这两个数据源的实际来源,因为在开发过程中数据来源有很多种情况,有数据库查询出来的结果、远程接口返回的结果、文件读取的结果等等。...等价于 = students.Where(p=>p.Class=="一班").ToList(); 在使用Linq写分页的时候,就是联合使用Take和Skip这两个方法: int pageSize =...> results = students.Select(p => new { p.Class, p.Name }).ToList(); 简单运算操作 Linq 里有几个需要注意的简单运算操作...的所有方法内容,但是这仍然不是Linq的全部。

    2.8K50

    Linq基础知识之延迟执行

    Linq中的绝大多数查询运算符都有延迟执行的特性,查询并不是在查询创建的时候执行,而是在遍历的时候执行,也就是在enumerator的MoveNext()方法被调用的时候执行,大说数Linq查询操作实例方法返回的都是...输出结果一目了然,当创建完查询之后添加的元素也包含到了结果集中,说明查询并没有立即执行,而是在使用foreach遍历之后才执行,这种特性就是Linq的延迟执行....当然,对于Linq来说,延迟执行是非常重要的,因为它把查询的创建和查询的执行解耦了,这让我们可以像创建SQL查询那样,分成多个步骤来创建我们的LINQ查询。...,所以必须使用上面提到的ToArray、ToList等方法使查询立即执行得到结果集并进行存储,代码如下: List list=new List(); list.AddRange(new...int[]{ 1, 43, 5, 7, 8 }); IEnumerable result = list.Where(n => n >= 40).ToList(); list.Add(50);

    2.1K100

    C#3.0新增功能09 LINQ 基础02 LINQ 查询简介

    下例中,Customers 表示数据库中的特定表,而查询结果的类型 IQueryable 派生自 IEnumerable。...但基本规则很简单:LINQ 数据源是支持泛型 IEnumerable 接口或从中继承的接口的任意对象。...支持非泛型 IEnumerable 接口的类型(如 ArrayList)还可用作 LINQ 数据源。 有关详细信息,请参阅如何:使用 LINQ 查询 ArrayList (C#)。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。 另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。...; int evenNumCount = evenNumQuery.Count(); 要强制立即执行任何查询并缓存其结果,可调用 ToList 或 ToArray 方法。

    4.8K30
    领券