2011-09-16 4 views
2

コレクションの操作を実行するには、常にラムダ式が好まれます。しかし、私はラムダ式よりも簡単なLINQで同じことを達成することができます。しかし、私はまだ抽象レベル&でトップに来ていることについて少し混乱しています?抽象レベルLinqまたはラムダ式の方が高い

+1

http://stackoverflow.com/questions/7391370/is-it-linq-or-lambda/7391389#7391389とhttp://stackoverflow.com/questions/5327897/difference-between- linq-queries-lambda-expression/5327982#5327982 LINQクエリを使用すると、コードがシンプルで読みやすくなります。彼らがいないところでそれらを使用しないでください。コンパイラはラムダ式と同じものを扱います。 –

+0

より抽象度の高いもの(何を意味するものであれ)ではなく、より便利なものを使用してください。 – Vlad

答えて

11

私は「LINQ」あなたは意味「クエリ式」で疑う:

var query = from x in y 
      where x.Foo 
      select x.Bar 

そして、私はあなたが直接拡張メソッドを呼び出すことを意味し、「ラムダ式」で疑う:

var query = y.Where(x => x.Foo) 
      .Select(x => x.Bar); 

これらの両方実際には LINQ ...

クエリの式は、少し a実際の操作に落とすためにはもっと多くの作業が必要ですが、変換処理がかなり機械的であることを考えると、それほど大きくはありません。

+0

+1私は質問を理解することができなかったので...しかし、応答は非常に明確でした:-) – xanatos

+0

+1は、両方ともLINQと呼ばれています。多くの人々がこれを理解していないことは悲しい。 –

+0

@ハサン:両方とも* LINQと呼ばれているわけではありません。どちらのアプローチもLINQの一部です。 LINQをどちらの方法で使用していても、実際には同じコードが生成されています。 –

3

LINQ式は、コンパイラによって対応する拡張メソッドに変換されます。ラムダ式はBCLの一部ですが、LINQ構文はコンパイラによって変換される文法的な砂糖だけですが、発行されたILの一部ではありません。

+1

私は立っていませんlist.SelectはLINQではありません –

+1

Nickpick:ラムダ式はコンパイラの砂糖だけではありませんか?匿名メソッドまたは式ツリーに変換されますが、存在しません – LukeH

2

私はあなたの質問は、クエリ構文(carList select car.Brandのcarから)とメソッド構文(carList.Select(car => car.Brand))のLinqの違いについて実際には推測していますか? その場合、簡単に答えられます:Linqのクエリ構文は構文的な砂糖だけであり、メソッド呼び出しに変換されます。そのため、抽象度が上がるまではまったく同じです。クエリ構文は、平均的な人間にはもっと分かりやすいように見えます。

メノ

関連する問題