2017-07-26 51 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般的風格可以比長更容易閱讀方法的調用鏈
  • 注意查詢語法表達式可以表示爲方法調用,但不是所有的方法調用可以在查詢語法
  • 在單個查詢中兩種語法混合來表達往往比粘到更混亂其中之一