链接到实体和链接到对象——它们是一样的吗?
本文关键字:链接 一样 实体 对象 | 更新日期: 2023-09-27 18:06:43
我通常使用术语entity
来表示业务数据对象,在我心目中,linq to entities
和linq to objects
是相同的。这是不对的吗?
绝对不是这样的。
LINQ-to-Objects是IEnumerable<T>
上的一组扩展方法,允许您对任意对象序列执行内存中的查询操作。这些方法在必要时接受简单委托。
LINQ-to- entities是一个LINQ提供者,它在IQueryable<T>
上有一组扩展方法。这些方法构建一个表达式树(这就是委托实际上作为Expression<>
传递的原因),提供者将基于对该表达式树的解析构建一个SQL查询。
作为一个例子,考虑以下查询:
var query1 = mydb.MyEntity.Select(x => x.SomeProp).Where(x => x == "Prop");
var query2 = mydb.MyEntity.Select(x => x.SomeProp).AsEnumerable().Where(x => x == "Prop");
第一个查询将构建一个由select和where组成的表达式树,其中两个lambda实际上被认为是 LambdaExpression
s。LINQ-to-Entities提供程序将把它转换成既选择又过滤的SQL。
第二个查询插入一个AsEnumerable()
,这将强制查询的其余部分使用LINQ-to-Objects。在这种情况下,提供程序将仅基于选择生成SQL,从数据库返回所有这些记录,然后在内存中进行筛选。显然,这可能会慢得多。
L2o用于内存中的对象。L2e查询数据库
对象链接术语"LINQ to Objects"指的是直接对任何IEnumerable或IEnumerable集合使用LINQ查询,而不使用中间的LINQ提供程序或API,如LINQ to SQL或LINQ to XML。您可以使用LINQ查询任何可枚举集合,如列表、数组或字典。集合可以是用户定义的,也可以由。net Framework API返回。
从基本意义上讲,LINQ to Objects代表了一种新的集合方法。在旧的方法中,您必须编写复杂的foreach循环,以指定如何从集合中检索数据。在LINQ方法中,您编写声明性代码来描述您想要检索的内容。裁判:http://msdn.microsoft.com/en-us/library/bb397919.aspx
Linq to EntityLINQ to Entities提供了语言集成查询(LINQ)支持,使开发人员能够使用Visual Basic或Visual c#编写针对实体框架概念模型的查询。对实体框架的查询由对对象上下文执行的命令树查询表示。LINQ到实体将语言集成查询(LINQ)查询转换为命令树查询,对实体框架执行查询,并返回实体框架和LINQ都可以使用的对象。下面是创建和执行LINQ to Entities查询的过程:Ref: http://msdn.microsoft.com/en-us/library/bb386964.aspx
Linq to entities是用于实体框架的,而Linq to objects是用于任何IEnumerable集合的。
更多细节:
- 链接到实体
- 对象链接
Linq2Entities表示通过ADO查询数据。. NET实体框架(数据库)
Linq2Objects表示在内存中查询数据(本地对象)