2017-07-26 6 views
0

2つのエンティティを結合するためにクエリ構文またはメソッド構文(ラムダ式)を使用することに違いがあることをパフォーマンスに関して知りたいですか?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

違いはありませんのために言及されていません。最初のバージョン(クエリ言語)は、 "実際の"コンパイルの前に、レキシカルに2番目のバージョン(メソッド構文)に翻訳されています。クエリ言語は構文的な砂糖だけであり、メソッド呼び出しに変換されます。これらの呼び出しはコンパイルされます(可能であれば、変換自体は結果の正確さには関係しません。たとえば、People.Joinが有効なC#であっても、Peopleのようなものであればメソッドがあります)。そこ

は多分、この翻訳の違いは、明示的Selectコールの代わりに、Join方法のresultSelectorパラメータを使用しますが、でもそれは、測定可能なパフォーマンスに影響を与えません。

This article Jon Skeetさんが、クエリ言語からメソッド構文への変換を理解する助けになりました。


「あなたはどうすればよいですか」という質問に答えるには、これは本当にあなた次第です。考えてみましょう:

  • あなたが理解/より読みやすいものを
  • 複雑なクエリは、多くの場合、クエリ構文で読みやすい、SQLに似たスタイルは、長いより読みやすくすることができ(と同僚!)多くの場合、混乱に付着よりなる単一のクエリの両方の構文を混合する方法の鎖は、クエリ構文式がメソッド呼び出しのように表すことができること
  • 注意を呼び出し、すべてではないメソッド呼び出しは、
  • クエリ構文で表現することができますそのうちの1つ
関連する問題