【问题标题】:What is the difference between Linq and EF syntax? [duplicate]Linq 和 EF 语法有什么区别? [复制]
【发布时间】:2017-04-17 05:23:39
【问题描述】:

有什么区别

Linq:var data=from a in context.object select a;

EF:var data=context.object().Tolist();

【问题讨论】:

标签: c# entity-framework linq


【解决方案1】:

它们都是 LINQ。

首先是查询(表达式)语法 IEnumerable<int> numQuery1 = from num in numbers where num % 2 == 0 orderby num select num;

另一个是方法语法 IEnumerable<int> numQuery2 = numbers .Where(num => num % 2 == 0) .OrderBy(n => n);

来源:MSDN: Query Syntax and Method Syntax in LINQ (C#)

【讨论】:

    【解决方案2】:

    在您的情况下,区别在于,在第一种情况下,数据将是惰性 IEnumerable 类型,并且将在枚举时执行。

    第二个示例将集合枚举到列表中,并且在执行ToList 方法后集合将在内存中。

    但我假设您对 LINQ 运算符(如 fromwhereselect 和方法 WhereSelect 等)之间的区别感兴趣。因为运算符被编译为方法,所以没有区别。

    【讨论】:

    • 是的,Andrii,我的困惑是我们有两种 EF 语法,一种是 linq,另一种是 EF 它自己,所以我很困惑什么时候使用哪一种?
    • @Kinnal,选择你最喜欢的。它们在运行时是相同的。就个人而言,我更喜欢方法调用链的方法。
    • @Kinnal - 这不是“ef it self”,它们是两种不同的语法,就是这样。使用您喜欢的任何一个。 LINQ 或 Lambda。
    • @Phill 都是 Linq 查询,查询或流利语法。在我看来,只调用一个 Linq 会让人感到困惑。 Lambda 是 Linq Fluent 语法的组成部分。
    • @AndriiLitvinov lazy IEnumerable 是什么,我认为您指的是延迟执行,IQueryable 也是如此,实际上这两种情况都是如此,只是在第二次调用 ToList() 时被调用
    【解决方案3】:

    两种语法的区别是

    • 您的第一个查询是 LINQ to Sql,第二个查询是实体 SQL。

    • Entity SQL 由实体框架对象服务直接处理

    • Entity SQL 返回 ObjectQuery 而不是 IQueryable

    【讨论】:

    • 他的问题是关于 LINQ 与 Lambda 语法。
    • 为什么第一个调用不是EF调用,他只是在访问db上下文
    【解决方案4】:

    您的意思是了解实体框架中查询语法的各种差异。

    Basics of LINQ & Lamda Expressions

    LINQ

    Linq 是微软首次尝试将查询集成到语言中。我们知道,从 sql 对象中查找数据非常容易,只需编写一个查询,而当我们想在 DataTable 或 Lists 中做同样的事情时它有点忙。通常,我们必须遍历每个元素以找到精确匹配,如果有一些聚合我们需要聚合值等。Linq 提供了一种简单的方法来编写可以与内存对象一起运行的查询。

    Lamda

    lambda 表达式是一个匿名函数,可用于创建委托或表达式树类型。通过使用 lambda 表达式,您可以编写可以作为参数传递或作为函数调用的值返回的局部函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。

    希望对你有帮助。

    【讨论】:

    • Lambda 是 Linq fluent 语法的组成部分,因此提供的定义确实具有误导性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2013-02-13
    • 2011-04-26
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多