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

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

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

请参阅: 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(); 

你的两次尝试都使用Linq。

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

第二个采用id匹配的第一个记录。

这是一个区别。

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

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

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