LINQ とラムダ式の違いは何ですか? linq クエリの代わりにラムダを使用する利点はありますか?
3 に答える
Linq は言語統合クエリです。linq を使用する場合、小さな無名関数をパラメーターとして使用することがよくあります。その小さな無名関数はラムダ式です。
var q = someList.Where(a => a > 7);
上記のクエリa => a > 7
はラムダ式です。これは、小さなユーティリティ メソッドを記述し、それを に渡すことと同じですWhere
。
bool smallMethod(int value)
{
return value > 7;
}
// Inside another function:
var q = someList.Where(smallMethod);
これは、あなたの質問に答えることができないことを意味します。Linq とラムダは交換可能ではなく、ラムダは linq の実装に使用されるテクノロジの 1 つです。
LINQは統合言語クエリです。ここで、lamda式は.Net2.0の匿名メソッドに似ています。
LINQはほとんどの場合ラムダ式に関連付けられているため、混乱している可能性があるため、実際にそれらを比較することはできません。
この記事を参照する必要があります:LINQ&Lamda式の基本
編集:(よくわかりませんが、クエリ構文とメソッドSytnaxの違いを探している可能性があります)
int[] numbers = { 5, 10, 8, 3, 6, 12};
//Query syntax:
IEnumerable<int> numQuery1 =
from num in numbers
where num % 2 == 0
orderby num
select num;
//Method syntax:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);
上記のMSDNの例では、メソッドSytnaxには、メソッドの(num => num % 2 == 0)
ように機能し、入力として数値を受け取り、偶数の場合はtrueを返すlamda式が含まれています。
どちらも似ており、Jon Skeetの言葉を借りれば、どちらも似たようなコードにコンパイルされます。
一言で言えば:
LINQは、クワイアリングテクノロジ(統合言語クエリ)です。LINQは、Where句などの標準のクエリ演算子メソッドへの引数としてラムダを広範囲に使用します。
ラムダ式は、式とステートメントを含む無名関数です。LINQとは完全に独立しており、区別されます。