Linq查询还是Lambda表达式?

时间:2013-04-24 07:06:31

标签: c# linq lambda

我在ASP.NET,C#,Web应用程序中使用Entity Framework。如果我需要从DataBase中选择一条记录(在数据访问层中),我应该使用哪种方法? 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);

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

5 个答案:

答案 0 :(得分:15)

查询表达式编译为方法表达式(Lambda表达式),因此应该没有任何区别,但在您的代码中,虽然您正在访问行为不同的FirstFirstOrDefault

请参阅:Query Syntax and Method Syntax in LINQ (C#)

LINQ Query Expressions (C# Programming Guide)

  

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

答案 1 :(得分:6)

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();

答案 2 :(得分:3)

你的两次尝试都使用Linq。

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

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

这是一个区别。

答案 3 :(得分:0)

我猜结果是一样的。 Lambda只是更舒服一点。 如果只需要一个表的结果,则lambda表达式非常快且可读。

答案 4 :(得分:0)

每个查询表达式都可以表示为C#-code,使用查询运算符作为扩展方法。但事实恰恰相反;只有一小部分标准查询运算符可用作查询表达式中的关键字。换句话说,查询表达式有一些方法调用机制没有的限制:

  1. 某些查询运算符根本没有C#查询表达式,例如ToArray的()。
  2. 我们不能在C#的查询表达式中使用各种重载。例如。 Select()的重载等待当前迭代对象的索引;你不能在查询表达式中调用这个重载。
  3. 我们不能在查询表达式中使用语句lambdas。 - 这就是将对象和集合初始值设定项引入C#语言的原因。