【发布时间】:2019-08-26 03:49:08
【问题描述】:
我通常使用术语entity 来表示业务数据对象,在我看来,linq to entities 和linq to objects 是相同的。这不正确吗?
【问题讨论】:
标签: c# linq linq-to-entities linq-to-objects
我通常使用术语entity 来表示业务数据对象,在我看来,linq to entities 和linq to objects 是相同的。这不正确吗?
【问题讨论】:
标签: c# linq linq-to-entities linq-to-objects
绝对不是这样的。
LINQ-to-Objects 是IEnumerable<T> 上的一组扩展方法,允许您对任意对象序列执行内存查询操作。这些方法在必要时接受简单的委托。
LINQ-to-Entities 是一个 LINQ 提供程序,它在 IQueryable<T> 上有一组扩展方法。这些方法构建了一个表达式树(这就是委托实际上以Expression<>s 传递的原因),并且提供程序将基于其对该表达式树的解析构建一个 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 组成的表达式树,其中两个 lambdas 实际上被视为LambdaExpressions。 LINQ-to-Entities 提供程序会将其转换为选择和过滤的 SQL。
第二个查询插入一个AsEnumerable(),这将强制查询的其余部分使用 LINQ-to-Objects。在这种情况下,提供者将仅根据选择生成 SQL,从数据库中返回所有这些记录,然后过滤将在内存中进行。显然,这可能会慢得多。
【讨论】:
AsEnumerable() before Select() 然后执行你想要什么。不过,总的来说,将事物分开是一个更好的主意。如果您有IEnumerable<T>,那么您将使用 LINQ-to-Objects。如果没有,那么数据库可能会更高效。
join 而不是select 会怎样?不是更有性能吗?
L2o 用于内存中的对象。 L2e 查询数据库。
【讨论】:
Linq 到对象 术语“LINQ to Objects”是指直接对任何 IEnumerable 或 IEnumerable 集合使用 LINQ 查询,而不使用中间 LINQ 提供程序或 API,例如 LINQ to SQL 或 LINQ to XML。您可以使用 LINQ 查询任何可枚举的集合,例如 List、Array 或 Dictionary。该集合可以是用户定义的,也可以由 .NET Framework API 返回。
在基本意义上,LINQ to Objects 代表了一种新的集合方法。在旧的方式中,您必须编写复杂的 foreach 循环来指定如何从集合中检索数据。在 LINQ 方法中,您编写说明性代码来描述您想要检索的内容。
参考:http://msdn.microsoft.com/en-us/library/bb397919.aspx
Linq 到实体 LINQ to Entities 提供语言集成查询 (LINQ) 支持,使开发人员能够使用 Visual Basic 或 Visual C# 针对实体框架概念模型编写查询。针对实体框架的查询由针对对象上下文执行的命令树查询表示。 LINQ to Entities 将语言集成查询 (LINQ) 查询转换为命令树查询,针对 Entity Framework 执行查询,并返回可供 Entity Framework 和 LINQ 使用的对象。以下是创建和执行 LINQ to Entities 查询的过程: 参考:http://msdn.microsoft.com/en-us/library/bb386964.aspx
【讨论】:
【讨论】:
Linq2Entities 代表通过 ADO.NET 实体框架(数据库)查询数据
Linq2Objects 代表在内存中查询数据(本地对象)。
【讨论】: