【问题标题】:linq to entities vs linq to objects - are they the same?linq to entity vs linq to objects——它们是一样的吗?
【发布时间】:2019-08-26 03:49:08
【问题描述】:

我通常使用术语entity 来表示业务数据对象,在我看来,linq to entitieslinq to objects 是相同的。这不正确吗?

【问题讨论】:

标签: c# linq linq-to-entities linq-to-objects


【解决方案1】:

绝对不是这样的。

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,从数据库中返回所有这些记录,然后过滤将在内存中进行。显然,这可能会慢得多。

【讨论】:

  • 有什么方法可以过滤 linq to object 查询的两个条件,还是在处理下一个操作之前总是缩小到第一个操作?
  • 视情况而定;如果您只想从数据库中获取 所有 记录,然后在内存中对它们执行操作,则可以将 AsEnumerable() before Select() 然后执行你想要什么。不过,总的来说,将事物分开是一个更好的主意。如果您有IEnumerable<T>,那么您将使用 LINQ-to-Objects。如果没有,那么数据库可能会更高效。
  • @dlev 你没有回答他的问题。
  • 如果我们在第一个中使用join 而不是select 会怎样?不是更有性能吗?
【解决方案2】:

L2o 用于内存中的对象。 L2e 查询数据库。

【讨论】:

    【解决方案3】:

    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

    【讨论】:

      【解决方案4】:

      Linq to entity 用于实体框架,而 Linq to objects 用于任何 IEnumerable 集合。

      更多细节:

      1. Linq to Entities
      2. Linq to Objects

      【讨论】:

        【解决方案5】:

        Linq2Entities 代表通过 ADO.NET 实体框架(数据库)查询数据

        Linq2Objects 代表在内存中查询数据(本地对象)。

        【讨论】:

          猜你喜欢
          • 2011-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-03
          • 1970-01-01
          相关资源
          最近更新 更多