你如何构建LINQ查询?

时间:2009-07-06 03:55:51

标签: linq entity-framework linq-to-entities entity

似乎有两种方法可以构建查询 - 使用查询表达式:

IEnumerable<Customer> result =
                        from customer in customers
                        where customer.FirstName == "Donna"
                        select customer;

或使用扩展方法:

IEnumerable<Customer> result =
           customers.Where(customer => customer.FirstName == "Donna");

你使用哪种?为什么?从长远来看,您认为哪种更受欢迎?

4 个答案:

答案 0 :(得分:1)

表达式语法中只有有限数量的操作可用,例如,Take()或First()仅可使用扩展方法。

如果没有所有必需的操作,我个人更喜欢表达式,如果没有,那么我会回到扩展方法,因为我觉得它们比lambdas更容易阅读。

看看这个答案,

Linq Extension methods vs Linq syntax

答案 1 :(得分:1)

我只使用方法语法(几乎),因为查询语法有更多限制。出于可维护性的原因,我发现最好立即使用方法语法,而不是稍后转换它,或者使用两种语法的混合。

一开始阅读起来可能有点困难,但是一旦你习惯它,它就会很自然。

答案 2 :(得分:0)

我只使用方法语法。这是因为我觉得写起来要快得多,而且我写了很多linq。我也喜欢它,因为它更简洁。如果在团队中工作,可能最好就哪种风格达成共识,因为混合这两种风格很难理解。

Microsoft建议使用查询语法。 “一般来说,我们建议使用查询语法,因为它通常更简单,更易读”。 http://msdn.microsoft.com/en-us/library/bb397947.aspx

答案 3 :(得分:0)

这取决于您和您的团队发现哪些更具可读性,我会根据具体情况选择此项。有些查询在语法形式上读得更好,并且有一些查询在方法形式上读得更好。当然,有一个广阔的中间地带,你不能说这种方式或另一种方式,或者有些人喜欢这种方式和其他方式。

请记住,您可以将两种形式混合在一起,使其更具可读性。

我认为没有理由怀疑将来任何一种形式都会消失。