より一般的にするには:
from item in someSource select new{item.Something}
someSource.Select(item => new{item.Something}
from item in someSource where item.SomeProperty == someValue
someSource.Where(item => new{item.Something}
from item in someSource group item.Property1 by item.Property2
someSource.GroupBy(item => item.Property2, item => item.Property1)
from item in someSource orderby item.Property1
someSource.OrderBy(item => item.Property1)
from item in someSource orderby item.Property1 descending
someSource.OrderByDescending(item => item.Property1)
select
それぞれの最初の形式の一部は、またはで終わる必要があるため、完全ではありませんgroup by
。これは 2 番目の形式には当てはまらないため、 の.OrderBy
後になくても、 に完全なクエリがありますorderby
。.Select(x => x)
変換するときは、すべてのクエリに追加できることを覚えておいてください。論理的な違いはありません。同等性により、最後にorderby descending
追加select item
する最後の例では、以下に示すものと同等の完全なクエリになりOrderByDescending
ます。
いくつかを一緒に追加する:
from item in someSource
where item.Property1 == 43
orderby item.Property2
select new {item.Property3, item.Property4}
someSource
.Where(item => item.Propert1 == 43)
.OrderBy(item => item.Propert2)
.Select(item => new{item.Propert3, item.Property4});
各メソッド呼び出しは個別であるため、2 番目の型のラムダで同じ用語を使用する必要はありません。したがって、これは次と同等です。
someSource
.Where(x=> x.Propert1 == 43)
.OrderBy(y=> y.Propert2)
.Select(z=> new{z.Propert3, z.Property4});
しかし、最初の形式ではそれができません。これは、各用語が 1 回だけ定義された単一の句であるためです。メソッドはすべて拡張であるため、次と同等です。
Queryable.Select(
Queryable.OrderBy(
Queryable.Where(someSource, x => x.Propert1 == 43),
y=> y.Propert2),
z=> new{z.Propert3, z.Property4});
また
Enumerable.Select(
Enumerable.OrderBy(
Enumerable.Where(someSource, x => x.Propert1 == 43),
y=> y.Propert2),
z=> new{z.Propert3, z.Property4});
Linq またはその言語の拡張メソッドのサポートがなくても、どの .NET 言語でも動作します。
LinqPad は、さまざまな方法でクエリ (または任意の C# コード) を調べるのに最適です。そのうちの 1 つは、クエリ構文を同等のメソッド構文に変換することです (とにかく、前者は後者にコンパイルされます)。
個人的には、私はこの 2 つを頻繁に切り替えています。大規模なクエリにはクエリ構文を優先します。式全体に、同等のクエリ構文を持たない呼び出しの比率が高い場合は、メソッド構文を優先しますが、それが問題になる場合はたくさんあります。その時に入力したものは何でも。