我在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);
在这种情况下是否有任何首选方式或其他优势?
答案 0 :(得分:15)
查询表达式编译为方法表达式(Lambda表达式),因此应该没有任何区别,但在您的代码中,虽然您正在访问行为不同的First
和FirstOrDefault
。
请参阅: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,使用查询运算符作为扩展方法。但事实恰恰相反;只有一小部分标准查询运算符可用作查询表达式中的关键字。换句话说,查询表达式有一些方法调用机制没有的限制: