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

LINQ驱动数据的查询功能

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

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

    了解LINQ

    本文主要的是泛谈LINQ是啥?以及常见的用法大纲如下: LINQ的那些根基 LINQ的一些基本用法 LINQ的根基 IEnumerable和IEnumerator 为啥能够被foreach?...实际上,能够被foreach的对象,一定是实现了带有返回值的IEnumerator的GetEnumerator()方法的接口,而.NET内置的该接口则是IEnumerable,一般指的是IEnumerable...的对象就是一个实现了IEnumerable的可被枚举的集合 LINQ的基本用法 扩展方法在LINQ的应用:LINQ的流式语法 LINQ的方法一般都是通过扩展方法了扩展的,就如最常用的几个,Where,Any...,实际上在返回result1和result2,就是通过IQueryProvider不断地在拼接表达式树,而最后通过foreach或者ToList等操作的时候,则才是真正调用Execute方法执行当前的IQueryable...里的那个表达式树属性Expression,而像LINQ To Sql或者是EFCore等需要IQueryable这种解释型的就是去实现了IQueryProvider里面的方法 参考 《C#7.0核心技术指南

    1.1K20

    C#规范整理·集合和Linq

    如果将属性设置为可写,则会增加抛出异常的几率。一般情况下,如果集合属性没有值,则它返回的Count等于0,而不是集合属性的值为null。...简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项; 匿名类型的属性是只读的,没有属性设置器,它一旦被初始化就不可更改; 如果两个匿名类型的属性值相同,那么就认为两个匿名类型相等; 匿名类型可以在循环中用作初始化器...13.区别LINQ查询中的IEnumerable<T>和IQueryable<T># LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了...稍加观察我们会发现,接口IQueryable<T>实际也是继承了IEnumerable<T>接口的,所以,致使这两个接口的方法在很大程度上是一致的。那么,微软为什么要设计出两套扩展方法呢?...注意 在使用IQueryable<T>和IEnumerable<T>的时候还需要注意一点,IEnumerable<T>查询的逻辑可以直接用我们自己所定义的方法,而IQueryable<T>则不能使用自定义的方法

    87330

    C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!

    在泛型集合的情况下,C# 提供了 IEnumerableT> 接口,它继承自非泛型的 IEnumerable 接口,并且返回的枚举器是泛型的,不需要进行装箱和拆箱操作。...工作原理: LINQ to Objects在内存中对集合进行查询,不涉及数据库。它使用IEnumerableT> 接口来扩展.NET集合,从而支持LINQ查询。...这表示实体的属性值与数据库中的值相匹配,没有任何更改。2、Added(已添加)当通过上下文的 Add 方法向数据库中插入新的实体时,该实体的状态被标记为已添加。...3、Modified(已修改)当实体的属性值发生更改,并且通过上下文的 SaveChanges 方法提交这些更改时,实体的状态被标记为已修改。这表示实体的属性值与数据库中的值不同。...在实体类上使用 Table 属性,并传入数据库中的表名。

    19610

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

    历史回顾 还记得我们当初在代码审查中从Exists()转向Any(),因为"LINQ是未来"吗?然后花了数年时间争论微观优化?让我们聊聊为什么在.NET 9中这个争论变得简单多了。...: 灵活但缓慢 适用于所有IEnumerable 有LINQ开销 更受青睐因为可读性更好 开发者们将这些经验教条般地植入代码库: "处理List一定要用Exists()!...基于Span的优化 改进的Span处理使Any()在可能情况下为数组和列表使用优化路径,避免完整IEnumerable枚举: // .NET 9内部实现示意 public static bool Any...T>(this ListT> list, FuncT, bool> predicate) { foreach (ref readonly var item in CollectionsMarshal.AsSpan...零分配 新的集合API利用ref struct枚举器,消除了常见场景下的堆分配 性能基准测试 让我们看看在.NET 9中的测试设置和结果对比 测试设置: using System; using System.Collections.Generic

    11110

    .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

    对于IEnumerableT>对象的LINQ查询是Enumerable静态对象在支撑着,然后通过匿名表达式来表示逻辑,这样就能顺其自然的查询集合。那么我们该如何下手扩展Linq to Object?...如果我们使用扩展方法那么只能是扩展IEnumerableT>对象,这没有问题。我们可以很方便的在LINQ的表达式中调用我们自己的扩展方法,让自己的方法跟着一起链式查询。...顺着数字序号理解,IEnumerableT>是Linq to Object的数据源,而Enumerable静态类是专门用来扩展Linq查询表达式中的查询方法的,所以当我们编写Linq查询IEnumerable...} 这是IQueryableT>接口中从IEnumerableT>继承下来的两个返回IEnumerator接口类型的方法,在我们目前使用的Linq to Sql、Linq to Entity中都会返回强类型的集合对象...Provider属性,该属性是IQueryProvider接口,根据注释说明我们搞懂了它是最后执行查询的提供程序,我们理所当然的把IQueryableT>的开始实例当成了查询的入口,并且在连续调用的扩展方法当中它都保持唯一的一个实例

    1.8K11

    给 c# 程序员的十个重要提示

    the test assembly [assembly: InternalsVisibleTo("MyTestAssembly")] 2: 使用 Tuples 类型 曾经见到过有人仅仅因为函数要返回多个值而创建了一个...在 .NET 中编写 LINQ 查询时, 只有当你访问 LINQ 查询的结果时, LINQ 查询才会被执 行, LINQ 的这种特征被称为延迟执行, 不过值得注意的是每访问一次结果, LINQ 查询...c# 中为枚举类型添加 Flags 标记可以将枚举作为位域(即一组标志)处理, 这样可 以对枚举值进行自由组合, 示例代码如下: class Program { static void Main...T>(T t) where T : IMyInterface { //Generic implementation goes in here } } 10: IEnumerable...类型不能确保只读 在你创建的类型中, 暴露了一个类型为 IEnumerable 的只读属性, 但是调用者依然可 以通过类型转换来修改属性的内容, 比如这样: class Program {

    1.3K40

    LINQ(集成查询)语言官方使用教程

    需要编写几种特殊的方法,我们称之为IEnumerableT>扩展方法,来添加一些功能,以便于与 LINQ 查询返回的 交互。...> InterleaveSequenceWithT> (this IEnumerableT> first, IEnumerableT> second)可以发现,在扩展方法的第一个自变量中添加了 this...此方法声明还遵循标准惯用做法,其中输入和输出类型为 IEnumerableT>。 遵循这种做法,可以将 LINQ 方法链在一起,从而执行更复杂的查询。...必须了解 IEnumerableT> 的工作原理,才能编写处理两个序列的 LINQ 方法。IEnumerableT> 接口有一个方法 (GetEnumerator)。 ...在一次运行中,共执行 2592 次查询,包括生成所有值和花色。可以提高此处的代码性能,以减少执行次数。 一个简单的修复方法是缓存构造扑克牌的原始 LINQ 查询的结果。

    28210

    走进 LINQ 的世界

    支持 IEnumerableT> 或派生接口(如泛型 IQueryableT>)的类型称为可查询类型。   可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。...在 LINQ 中,您不必像在 SQL 中那样频繁使用 join,因为 LINQ 中的外键在对象模型中表示为包含项集合的属性。...若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。...还必须使用方法需要检索元素的最大值在源序列的查询。System.Linq 命名空间中的标准查询运算符的参考文档通常使用方法语法。

    5.6K30

    编写高质量代码:改善C#程序的157个建议

    总是使用TryParse,不使用Parse 恰当使用NullableT>类型 如果数据库的字段可为null,那么对应的C#实体类属性也应当可以为null。使用int?...使用匿名类型存储LINQ查询结果 在查询中使用Lambda表达式 实际上我只用Lambda表达式,因为个人认为LINQ的查询语法相当怪异,像SQL又有不同,看上去很别扭。...理解延迟求值和主动求值的区别 LINQ查询表达式并没有立即执行,只有在执行ToList()或者遍历时才会执行。...区别LINQ中的IEnumerableT>和IQuerableT> 简单来说,IEnumerableT>针对的是LINQ to Objects,IQuerableT>针对的是LINQ...在LINQ查询中避免不必要的迭代 使用First()、Take()等方法,比使用Where()迭代的次数更少。 感谢阅读,希望这篇文章能给你带来帮助!

    2.9K30

    C#3.0新增功能09 LINQ 基础08 支持 LINQ 的 C# 功能

    对象和集合初始值设定项 通过对象和集合初始值设定项,初始化对象时无需为对象显式调用构造函数。 初始值设定项通常用在将源数据投影到新数据类型的查询表达式中。...假定一个类名为 Customer,具有公共 Name 和 Phone 属性,可以按下列代码中所示使用对象初始值设定项: var cust = new Customer { Name = "Mike",...匿名类型提供一种在查询结果中对一组属性临时分组的简便方法,无需定义单独的命名类型。...标准查询运算符是一组扩展方法,它们为实现 IEnumerableT> 的任何类型提供 LINQ 查询功能。 有关详细信息,请参阅扩展方法。...在 LINQ 编程中,在对标准查询运算符进行直接方法调用时,会遇到 lambda 表达式。

    2.3K30

    IEnumerable 使用foreach 详解

    自己实现迭代器 yield的使用 怎样高性能的随机取IEnumerable中的值 我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件?...为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正文。...其中IEnumerable只有一个返回IEnumerator的GetEnumerator方法。而IEnumerator中有两个方法加一个属性。...所以我们在foreach中不能修改item的值。 我们再来回答第二个问题:“要实现foreach需要满足什么条件?”: 必须实现IEnumerable接口?NO ?...(Linq的那些查询操作符就是以扩展的形式实现的)[了解扩展方法]。 怎样高性能的随机取IEnumerable中的值 ? 这段代码来源《深入理解C#》,个人觉得非常妙。贴出来给大家欣赏哈。

    1.9K40

    .NET深入解析LINQ框架(二:LINQ优雅的前奏)

    对象图中可以很清楚的看出各个对象中的属性和方法,在Student类中我们定义了几个基本的学生属性。...2.3.深入IEnumerable、IEnumerableT>、Enumerable(LINQ to Object框架的入口) 在4.2结中已经为LINQ的查询做了支撑,那么查询到底区别在什么地方...在使用IEnumerableT>和IQueryableT>之间的区别是什么?如何很好的理解这两者在LINQ的整个框架中的关系。...泛型的IEnumerableT>接口继承自IEnumerable接口,该接口表示可迭代的数据集合。Linq to object 也就是查询IEnumerableT>集合。...LINQ查询表达式最后是调用的链式查询方法,这些方法都是在静态类中定义好的,IEnumerableT>类型是直接的使用匿名方法调用执行,而IQueryableT>是使用人工解析的方式进行的,也就是自定义数据源

    2.4K30

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

    在 LINQ 中,查询的执行与查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据。 ? 数据源 上例中,数据源是一个数组,因此它隐式支持泛型 IEnumerableT> 接口。...这一事实意味着该数据源可以用 LINQ 进行查询。 查询在 foreach 语句中执行,且 foreach 需要 IEnumerable 或 IEnumerableT>。...支持 IEnumerableT> 或派生接口(如泛型 IQueryableT>)的类型称为可查询类型。 可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...但基本规则很简单:LINQ 数据源是支持泛型 IEnumerableT> 接口或从中继承的接口的任意对象。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。 另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。

    4.2K30
    领券