9

我在我的 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);

在这种情况下是否有任何首选方式或比其他方式有任何优势?

4

5 回答 5

15

查询表达式编译为方法表达式(Lambda 表达式),因此在您的代码中应该没有任何区别,尽管您正在访问First并且FirstOrDefault其行为会有所不同。

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

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

在编译时,查询表达式根据 C# 规范中规定的规则转换为标准查询运算符方法调用。任何可以用查询语法表达的查询,也可以用方法语法表达。但是,在大多数情况下,查询语法更具可读性和简洁性。

于 2013-04-24T07:10:21.827 回答
7

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();
于 2013-04-24T07:12:39.700 回答
4

您的两次尝试都使用了 Linq。

第一个记录一条记录并检查 id 是否匹配。

第二个获取 id 匹配的第一条记录。

那是有区别的。

于 2013-04-24T07:13:05.400 回答
0

每个查询表达式都可以使用对查询运算符的调用作为扩展方法来表示为 C# 代码。但事实并非如此。只有一小部分标准查询运算符可以用作查询表达式中的关键字。换句话说,查询表达式有一些方法调用机制没有的限制:

  1. 一些查询运算符根本没有等效的 C# 查询表达式,例如 ToArray()。
  2. 我们不能在 C# 的查询表达式中使用各种重载。例如,有一个 Select() 的重载等待当前迭代对象的索引;您不能在查询表达式中调用此重载。
  3. 我们不能在查询表达式中使用语句 lambda。- 这就是将对象和集合初始化器引入 C# 语言的原因。
于 2015-02-08T10:00:01.123 回答
0

我想结果是一样的。Lambda 稍微舒服一点。如果您只需要一张表的结果,则 lambda 表达式非常快速且易读。

于 2013-04-24T07:11:37.663 回答