10.4 標準LINQ演算子
この節では、LINQプロバイダが提供する標準演算子について説明します。対応するクエリ式がない演算子も多いですが、対応するものがある場合には、そのクエリ式についても説明します。明示的にメソッドを実行することでしか利用できないLINQ機能もあります。クエリ式の中で使用できる演算子でも明示的に呼び出す必要がある場合があります。ほとんどの演算子はオーバーロードされていますが、クエリ式では一部の高度なオーバーロードを使用できないからです。
LINQ演算子は、C#の通常の意味での演算子ではありません。つまり、+ や&& のような記号ではありません。LINQにはLINQの用語があります。この章では、演算子とはLINQプロバイダが提供するクエリ機能を意味しています。C#では、メソッドのように見えます。 |
これらすべての演算子には、合成できるように設計されているという共通点があります。このことによって、演算子を自由に組み合わせて使用でき、単純な項目に対して複雑なクエリを実行できるようになります。これを可能にするために、演算子は項目の集合を表す型(例えば、IEnumerable<T>
)を入力として取るだけでなく、ほとんどの演算子は項目の集合を表す型を返します。既に述べたように、項目の型は必ずしも同じとは限りません。演算子への入力がIEnumerable<T>
で、出力がIEnumerable<TResult>
となるような場合があります。ここで、TResult
はT
と同じである必要はありません。それでも、さまざまな方法で連鎖させることができます。その理由の1つは、LINQ演算子は入力を変更せず、オペランドに基づいて新たな結果を生成するという点で数学的な関数のようなものだからです(通常、関数型プログラミング言語は同じ特性を持っています)。つまり、副作用を恐れず任意の組み合わせで演算子をつなげることができるばかりでなく、LINQクエリは入力に影響を与えないため、複数のクエリへの入力に同じソースを使用することもできます。各演算子は、入力を基に新しいクエリ結果を作成して返します。 ...
Get プログラミングC# 第8版 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.