2017-07-26 56 views
0

我想在性能方面知道的是有使用用于连接两个实体的查询语法或方法语法(Lambda表达式)有什么区别?你应该使用什么来加入LINQ,查询语法或方法语法?

我已经知道,一般有查询语法和方法语法之间的结果方面没有差别。但是,加入哪一个更好地使用性能呢? 下面是示例代码:

var queryResult = (from p in People 
         join i in Incomes 
     on p.PersonId equals i.PersonId 
         select new { p.PersonId, p.Name, p.Age, i.Amount } 
        ).ToList(); 

     var lambdaResult = People.Join(Incomes, 
         p => p.PersonId, 
         i => i.PersonId, 
        (p, i) => new { p.PersonId, p.Name, p.Age, i.Amount }).ToList(); 

我已经通过这些网站去,但没有已经提了加入 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq

LINQ - Query syntax vs method chains & lambda

回答

3

没有区别。您的第一个版本(查询语言)的词汇翻译成第二个(方法的语法)之前“真正”的编写。查询语言只是语法糖,并转化为方法调用。这些调用然后编译(如果可能的话 - 翻译本身不关心结果的正确性,例如如果People.Join即使是合法的C#和存在任何People可能是这样的Join方法)。

这个翻译可能有区别,因为该翻译使用明确的Select调用而不是Join方法的resultSelector参数,但即使这样做也不会影响性能。

This article通过乔恩斯基特帮助我了解从查询语言方法的语法转换。


要回答这个问题:“你应该用”:​​这是真的取决于你。试想一下:

  • 更重要的是可读/理解你(和你的同事!)
  • 复杂的查询,往往是在查询语法更容易读,SQL般的风格可以比长更容易阅读方法的调用链
  • 注意查询语法表达式可以表示为方法调用,但不是所有的方法调用可以在查询语法
  • 在单个查询中两种语法混合来表达往往比粘到更混乱其中之一