LINQ查询或Lambda表达式?(Linq query or Lambda expression?

2019-09-01 00:48发布

我在我的ASP.NET,C#,Web应用程序使用实体框架。 如果我需要(在数据访问层)来选择从数据库中的记录,我应该使用哪种方法? LINQ查询或Lambda表达式?

例如:-

//Linq        
var result = from a in db.myTable.Take(1) where a.Id == varId  select a;
return result.First();

//Lambda
return db.myTable.FirstOrDefault(a => a.Id == varId);

是否有这种情况或任何优势超过其他任何首选的方法?

Answer 1:

查询表达式编译为方法表达式(Lambda表达式),所以不应该有任何区别,在你的代码虽然你正在访问FirstFirstOrDefault这将表现不同。

请参阅: 查询语法和方法语法在LINQ(C#)

和LINQ查询表达式(C#编程指南)

在编译时,查询表达式呼叫根据在C#说明书中阐述的规则转换成标准查询操作方法。 可以通过使用查询语法来表达任何查询,也可以通过使用方法语法表示。 然而,在大多数情况下,查询语法是更具可读性和简洁。



Answer 2:

LINQ查询语法只是一个语法糖表达的方法。 任何Linq查询编译成表达的方法。 顺便说一下你的第一个查询:

var query = from a in db.myTable.Take(1) 
            where a.Id == varId  
            select a;
return query.First();

相当于

return db.myTable.Take(1).Where(a => a.Id == varId).First();


Answer 3:

无论您尝试的使用Linq。

首先需要一个记录和检查的ID相匹配。

第二个需要其中ID匹配的第一个记录。

这是一个区别。



Answer 4:

我猜的结果是一样的。 拉姆达只是有点更舒适。 如果你只需要一个表的结果,lambda表达式是非常快速和可读性。



Answer 5:

每个查询表达式可以用电话查询运营商扩展方法可以表示为C#-code。 但相反的是不正确的; 仅标准查询操作符的一个小的子集可以被用作查询表达式的关键字。 换句话说查询表达式有一定的局限性,该方法调用机制不具备:

  1. 一些查询运算符具有根本就没有C#查询表达式等效,例如ToArray的()。
  2. 我们不能用各种重载在C#的查询表达式。 例如存在着等待当前迭代对象的索引选择()的过载; 你不能调用查询表达式中的此重载。
  3. 我们不能在查询表达式使用lambda表达式。 - 这就是为什么对象和集合初始化已经引入到C#语言的原因。


文章来源: Linq query or Lambda expression?
标签: c# linq lambda