本篇根据标准查询运算符的执行方式对其进行分类。 执行方式 即时 立即执行指的是在代码中声明查询的位置读取数据源并执行运算。 返回单个不可枚举的结果的所有标准查询运算符都立即执行。...在执行时,流式处理运算符一边读取每个源元素,一边对该源元素执行运算,并在可行时生成元素。 流式处理运算符将持续读取源元素直到可以生成结果元素。 这意味着可能要读取多个源元素才能生成一个结果元素。...在执行时,非流式处理查询运算符将读取所有源数据,将其放入数据结构,执行运算,然后生成结果元素。 分类表 下表按照执行方法对每个标准查询运算符方法进行了分类。...在此类情况下,参数列表中的第一个序列始终以延迟流式处理方式来执行计算。...Boolean X Single TSource X SingleOrDefault TSource X Skip IEnumerableT> X SkipWhile IEnumerable
Where操作符不启动查询的执行。当开始对序列进行遍历时查询才开始执行,此时过滤条件将被应用到查询中。Where操作符的使用方法已经在第一节中出现过,这里不再冗述。...Aggregate Aggregate操作符对集合值执行自定义聚合运算。例如,需要列出所有产品类别清单,每个类别名称之间用顿号连接。...此方法一般仅用于实现类中的方法与IEnumerableT>接口方法重名时。例如,实现类Test中有一个Where方法,当使用Test对象调用Where时,将执行Test自身的Where方法过程。...如果要执行IEnumerableT>的Where方法,便可以使用AsEnumerable进行进行转换后,再调用Where方法即可。...下图显示对一个字符序列执行三个不同的分区操作的结果。第一个操作返回序列中的前三个元素。第二个操作跳过前三个元素,返回剩余的元素。第三个操作跳过序列中的前两个元素,返回接下来的三个元素。 1.
LINQ让数据处理变得简单 Where方法 每一项数据都会经过predicate的测试,如果针对一个元素,predicate执行的返回值为true,那么这个元素就会放到返回值中。...Employee e2 = list.SingleOrDefault(e => e.Id == 4); Employee e3 = list.SingleOrDefault(e => e.Id == 10...ThenByDescending(e => e.Salary) // 千万不要写成 // list.OrderBy(e => e.Age).OrderByDescending(e => e.Salary) 限制结果集...集合转换 有一些地方需要数组类型或者List类型的变量,可以用ToArray()方法和ToList()分别把IEnumerableT>转换为数组类型和ListT>类型。...(g => g.Count())//按次数排序 .Select(g=>new { Char=g.Key,Count=g.Count()}); 委托 1、委托是可以指向方法的类型,调用委托变量时执行的就是变量指向的方法
想对所有关注的朋友说声:“对不起,我来晚了!” 希望最后一篇的内容对得起这一个月时间的等待。在学习完表达式树的创建和遍历之后,我们要利用它的特性来写一个我们自己的Linq Provider。...来看看我们对Url参数的定义: ? 标题中包括模式的文章:http://linqtocnblogs.cloudapp.net?...public static IEnumerableT> WhereT>(this IEnumerableT> list, FuncT, bool> predicate) { var result...可以在运行时去遍历解释然后执行,那么这样就可以将表达式转换成各种其它的方式去获取数据,伟大的Linq to SQL就是这么实现的。...主要用于计算指定表达式目录树所表示的查询,返回的结果是一个可枚举的类型。 而Execute会执行指定表达式目录树所表示的查询,返回指定的结果。
主要是为了对实现类隐藏具体的EF 上下文实现类。...T Get(ExpressionT, bool>> predicate) { return Set.SingleOrDefault(predicate); } public int...不过,这里可以根据实际业务需要修改方法: Single 返回单个数据,如果数据大于1或者等于0,则抛出异常 SingleOrDefault 返回单个数据,如果结果集没有数据,则返回null,如果多于1,...则抛出异常 First 返回结果集的第一个元素,如果结果集没有数据,则抛出异常 FirstOrDefault 返回结果集的第一个元素,如果没有元素则返回null 实现查询方法: public List执行SaveChanges方法。 这一篇介绍到这里,虽然说明不是很多,但是这也是我在开发中总结的经验。
延迟执行:LINQ查询通常是延迟执行的,即查询表达式本身不会立即执行,直到实际遍历结果时才触发查询。...ToArray:将一个实现了IEnumerableT>接口的集合转换为一个数组,属于将集合转换为数组类型的方法。...ToDictionary:将一个IEnumerableT>集合转换为一个Dictionary键值对集合(字典)的方法,注意 ToDictionary 要求键唯一,否则抛出异常...ToLookup:将一个IEnumerableT>集合转换为一个泛型Lookup,Lookup一个一对多字典,用于将键映射到值的集合。...select: 指定执行查询时,所返回序列中元素的类型和形状。 group: 根据指定的密钥值对查询结果分组。
Single / SingleOrDefault: 返回单个元素。 Aggregate: 对序列中的元素执行累积操作。...IQueryableT>:这代表了一个可查询的数据源,通常用于与数据库查询交互。它支持延迟加载,这意味着查询不会立即执行,而是在需要结果时才会被执行,从而优化查询性能。...T> WhereGreaterThanT>(this IEnumerableT> source, T threshold) where T : IComparableT>...T> CustomFilterT>(this IEnumerableT> source, FuncT, bool> predicate) { foreach (var item...以下是一些优化 LINQ 查询性能的建议: 选择适当的数据源: 选择最适合你查询需求的数据源,如 ListT>、IEnumerableT>、IQueryableT> 等。
下图展示了对一系列字符执行按字母顺序排序操作的结果。 ? 下节列出了对数据进行排序的标准查询运算符方法。 方法 方法名 说明 C# 查询表达式语法 详细信息 OrderBy 按升序对值排序。...联合 下图演示对两个字符序列执行的联合操作。 返回的序列包含两个输入序列的唯一元素。 ? 03 筛选数据 筛选是指将结果集限制为仅包含满足指定条件的元素的操作。 它也称为选定内容。...下图演示了对字符序列进行筛选的结果。 筛选操作的谓词指定字符必须为“A”。 ? 下面一节列出了执行所选内容的标准查询运算符方法。...方法名 说明 C# 查询表达式语法 详细信息 AsEnumerable 返回类型化为 IEnumerableT> 的输入。 不适用。...Enumerable.ToDictionary ToList 将集合转换为 ListT>。 此方法强制执行查询。 不适用。
")] 执行中, [Description("执行完成")] 执行完成, [Description("执行任务计划中")]...if (predicate == null) { return this.DataContext.Set().SingleOrDefault...(); } return this.DataContext.Set().SingleOrDefault(predicate);...PagesT>(IQueryableT> query, int pageIndex, int pageSize, out int count) where T : class {...PagesT>(int pageIndex, int pageSize, out int count) where T : class { if (pageIndex
(DBContainer db = new DBContainer()) { SysSample entity = db.SysSample.SingleOrDefault...using (DBContainer db = new DBContainer()) { return db.SysSample.SingleOrDefault...T> GetItemsToGenerateT>(IEnumerable itemCollection) where T: EdmType { return...} } public bool IsExists(string id) { if (db.SysSample.SingleOrDefault...重构后的架构(VS2013)执行根目录下的script.sql脚本。
例如 IEnumerable.Where 的签名: FuncIEnumerableT>, FuncT, bool>, IEnumerableT>> // IEnumerableT> Where...T>(this IEnumerableT> source, FuncT, bool> predicate); 可以表示为: (IEnumerableT>, (T → bool)) → IEnumerable...T> 函数的纯洁性 纯函数 是指没有任何副作用的函数,除了根据输入值计算输出值之外,什么也不做。...改变其输入参数 抛出异常 执行任何 I/O 操作 纯函数拥有许多的好处: 并行化:由于输出值仅依赖于输入值,所以可以并行执行任务。 惰性求值 记忆化:缓存函数结果,以便只计算一次。...诚实的函数 诚实的函数始终履行自己的签名。
在 LINQ 查询中,始终会用到对象。...查询在 foreach 语句中执行,且 foreach 需要 IEnumerable 或 IEnumerableT>。...下例中,Customers 表示数据库中的特定表,而查询结果的类型 IQueryableT> 派生自 IEnumerableT>。...在应用程序中,可以创建一个检索最新数据的查询,并可以按某一时间间隔反复执行该查询以便每次检索不同的结果。 强制立即执行 对一系列源元素执行聚合函数的查询必须首先循环访问这些元素。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。 另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。
例如: //运算结果为1.0 float res = 3 / 2; //运算结果为1.5 float ress = 3f / 2f; //这是错误写法,因为2.2这种写法是一个double类型 float...由输出结果可以得出:上面的用法中,静态字段每次调用获得的值都是同一个,即初始化时所赋的值;而调用静态属性每次获得的值都是不同的,每次调用都执行一次get方法。...(T set) { Return string.Join(“,”,set); } 上面这个方法不能正确返回拼接后的字符串,正确的方式如下: string JoinStrRight(IEnumerable...SingleOrDefault:找到符合条件的一个元素,如果找不到,返回null;如果有多个元素符合条件,抛异常。...3)ExceptT> 假设有两个类型为List集合,list1和list2。
应用程序始终将源数据视为 IEnumerableT> 或 IQueryableT> 集合。 例如在 LINQ to XML 中,源数据显示为 IEnumerable。...更具体地说,查询变量始终是可枚举类型,在 foreach 语句或对其 IEnumerator.MoveNext 方法的直接调用中循环访问时会生成元素序列。...查询变量不存储在 foreach 循环生成中的任何实际结果数据。 并且当 foreach 语句执行时,查询结果不会通过查询变量 scoreQuery 返回。...创建这些组之后,附加子句会筛选出一些组,然后按升序对组进行排序。 若要执行这些附加操作,需要由 countryGroup 表示的延续。...orderby 子句 使用 orderby 子句可按升序或降序对结果进行排序。 还可以指定次要排序顺序。 下面的示例使用 Area 属性对 country 对象执行主要排序。
1.2 数据源 在上一个示例中,由于数据源是数组,因此它隐式支持泛型 IEnumerableT> 接口。...支持 IEnumerableT> 或派生接口(如泛型 IQueryableT>)的类型称为可查询类型。 可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。...如果您熟悉泛型 IEnumerableT> 接口,那么您就会了解,它不具有 Where 方法。...编译器可推断 num 的类型,因为它了解 numbers 是泛型 IEnumerableT> 类型。
以前是使用ADO.NET来进行对数据库中得数据表进行操作,现在,使用ORM直接对对象进行操作,操作对象就等于操作数据库表, 那怎么让对象和数据库表一一对应起来?...LINQ关键字 关键字 说明 from 指定范围变量和数据源 where 根据bool表达式从数据源中筛选数据 select 指定查询结果中的元素所具有的类型或表现形式 group 对查询结果按照键/值执行分组...into 提供一个标识符,它可以充当对join、group或select子句结果的引用 orderby 对查询出的元素执行排序(ascending/descending) join 按照两个指定匹配条件对等连接两个数据源...let 产生一个用于存储子表达式查询结果的范围变量 LINQ语法 只有实现了【IEnumerable】接口的数据源,才能执行相关的LINQ操作。...使用SingleOrDefault查询出两个相同的结果依然会出现异常提示) 一般情況下都会使用【SingleOrDefault】,因为这能直接判断这个唯一的信息是否正确,项目中出现相同的值肯定是有异常的
它提供了一套简单而直观的方法来执行数据库查询、插入、更新和删除等操作。 2)轻量级 PetaPoco是一个轻量级的框架,不依赖于复杂的配置和大量的依赖项。...它的核心库非常小巧,对系统资源的消耗也很低,适用于各种规模的项目。 3)高性能 PetaPoco执行数据库操作的速度非常快,与其他ORM框架相比具有较低的性能开销。...开发人员可以自由地编写SQL查询语句,并通过简单的映射机制将查询结果映射到对象模型中。...x); } //检查主键是否存在 if (db.Exists(23)) db.Delete (23); //执行...Sql databaseQuery.Execute("insert into temp1 (t) values (@0)", new SqlParameter() {
一致性(Consistence): 如果多次将对象与另一个对象比较,结果始终相同.只要未修改x和y的应用对象,x.equals(y)连续调用x.equals(y)返回相同的值l....在我们未对对象进行修改时,多次调用hashcode使用返回同一个整数.在同一个应用程序中多次执行,每次执行返回的整数可以不一致....Distinct(IEnumerable, IEqualityComparer) 通过使用指定的 IEqualityComparerT> 对值进行比较...返回 IEnumerable 一个包含源序列中的非重复元素的 IEnumerableT>。...= "MR.A", Age = 32 }; bool result = stu1.Equals(stu2); //false because it's reference Equals 上述代码片段执行后结果非预期效果
简单的来表述就是:本地数据源用IEnumerableT>,远程数据源用IQueryableT>。 ...LINQ to SQL引擎最终会将表达式树转化成为相应的SQL语句,然后在数据库中执行。 那么到底什么时候使用IQueryableT>,什么时候使用IEnumerableT>呢?...item.Title)); } Console.ReadLine(); 通过上面的代码可以发现,虽然我们针对temp1使用的是延迟求值,但是在整个LINQ查询语句的最后对结果使用了...在LINQ to SQL的查询中,要尽量始终使用IQueryableT>。...在使用IQueryableT>和IEnumerableT>的时候还需要注意一点,IEnumerableT>查询的逻辑可以直接用我们自己所定义的方法,IQueryableT>则不能使用自定义的方法
一致性(Consistence): 如果多次将对象与另一个对象比较,结果始终相同.只要未修改x和y的应用对象,x.equals(y)连续调用x.equals(y)返回相同的值l....在我们未对对象进行修改时,多次调用hashcode使用返回同一个整数.在同一个应用程序中多次执行,每次执行返回的整数可以不一致....Distinct(IEnumerable, IEqualityComparer) 通过使用指定的 IEqualityComparerT> 对值进行比较...返回 IEnumerable 一个包含源序列中的非重复元素的 IEnumerableT>。...MR.A", Age = 32 }; bool result = stu1.Equals(stu2); //false because it's reference Equals 上述代码片段执行后结果非预期效果