我在我的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);
是否有这种情况或任何优势超过其他任何首选的方法?
查询表达式编译为方法表达式(Lambda表达式),所以不应该有任何区别,在你的代码虽然你正在访问First
和FirstOrDefault
这将表现不同。
请参阅: 查询语法和方法语法在LINQ(C#)
和LINQ查询表达式(C#编程指南)
在编译时,查询表达式呼叫根据在C#说明书中阐述的规则转换成标准查询操作方法。 可以通过使用查询语法来表达任何查询,也可以通过使用方法语法表示。 然而,在大多数情况下,查询语法是更具可读性和简洁。
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();
我猜的结果是一样的。 拉姆达只是有点更舒适。 如果你只需要一个表的结果,lambda表达式是非常快速和可读性。
每个查询表达式可以用电话查询运营商扩展方法可以表示为C#-code。 但相反的是不正确的; 仅标准查询操作符的一个小的子集可以被用作查询表达式的关键字。 换句话说查询表达式有一定的局限性,该方法调用机制不具备:
- 一些查询运算符具有根本就没有C#查询表达式等效,例如ToArray的()。
- 我们不能用各种重载在C#的查询表达式。 例如存在着等待当前迭代对象的索引选择()的过载; 你不能调用查询表达式中的此重载。
- 我们不能在查询表达式使用lambda表达式。 - 这就是为什么对象和集合初始化已经引入到C#语言的原因。