次の方法で共有


LINQ to Entities クエリの標準クエリ演算子

クエリでは、データ ソースから取得する情報を指定します。 クエリでは、情報を返す前に並べ替え、グループ化、および整形する方法を指定することもできます。 LINQ には、クエリで使用できる一連の標準クエリ メソッドが用意されています。 これらのメソッドのほとんどはシーケンスに対して動作します。このコンテキストでは、シーケンスは、 IEnumerable<T> インターフェイスまたは IQueryable<T> インターフェイスを実装する型を持つオブジェクトです。 標準的なクエリ演算子のクエリ機能には、フィルター処理、プロジェクション、集計、並べ替え、グループ化、ページングなどが含まれます。 より頻繁に使用される標準クエリ演算子の中には、クエリ式構文を使用して呼び出すことができるように、専用のキーワード構文があります。 クエリ式は、メソッドベースの同等の方法とは異なる、読みやすいクエリ表現方法です。 クエリ式句は、コンパイル時にクエリ メソッドの呼び出しに変換されます。 同等のクエリ式句を持つ標準クエリ演算子の一覧については、「 標準クエリ演算子の概要」を参照してください。

LINQ to Entities クエリでは、すべての標準クエリ演算子がサポートされているわけではありません。 詳細については、「 サポートされている LINQ メソッドとサポートされていない LINQ メソッド (LINQ to Entities)」を参照してください。 このトピックでは、LINQ to Entities に固有の標準クエリ演算子について説明します。 LINQ to Entities クエリの既知の問題の詳細については、「LINQ to Entities の既知の問題と考慮事項」を参照してください。

プロジェクションおよびフィルター処理の方法

プロジェクション とは、結果セットの要素を目的の形式に変換することを指します。 たとえば、結果セット内の各オブジェクトから必要なプロパティのサブセットを射影したり、プロパティを射影して数学的計算を実行したり、結果セットからオブジェクト全体を射影したりできます。 射影方法は SelectSelectMany です。

フィルター処理 とは、指定された条件に一致する要素のみを含むよう結果セットを制限する操作を指します。 フィルター処理方法は Where

プロジェクションおよびフィルター処理メソッドのほとんどのオーバーロードは、位置引数を受け入れるものを除いて、LINQ to Entities でサポートされています。

結合メソッド

結合は、相互にナビゲート可能なリレーションシップを持たないデータ ソースを対象とするクエリの重要な操作です。 2 つのデータ ソースの結合は、一方のデータ ソース内のオブジェクトと、共通の属性またはプロパティを共有する他のデータ ソース内のオブジェクトとの関連付けです。 結合メソッドは JoinGroupJoin です。

結合メソッドのほとんどのオーバーロードは、 IEqualityComparer<T>を使用するものを除き、サポートされています。 これは、比較子をデータ ソースに変換できないためです。

メソッドの設定

LINQ のセット操作は、同じまたは別のコレクション (またはセット) 内の同等の要素の有無に基づいて結果セットを作成するクエリ操作です。 set メソッドは、 AllAnyConcatContainsDefaultIfEmptyDistinctEqualAllExceptIntersect、および Unionです。

セット メソッドのほとんどのオーバーロードは LINQ to Entities でサポートされていますが、LINQ to Objects と比較して動作にいくつかの違いがあります。 ただし、比較子をデータ ソースに変換できないため、 IEqualityComparer<T> を使用する set メソッドはサポートされません。

順序付けメソッド

順序付け (並べ替え) とは、1 つ以上の属性に基づいて結果セットの要素の順序を示します。 複数の基準を指定すると、グループ内での結び付きが壊れることがあります。

順序付けメソッドのほとんどのオーバーロードは、 IComparer<T>を使用するものを除き、サポートされています。 これは、比較子をデータ ソースに変換できないためです。 順序付け方法は、 OrderByOrderByDescendingThenByThenByDescending、および Reverseです。

クエリはデータ ソースで実行されるため、順序付け動作は CLR で実行されるクエリとは異なる場合があります。 これは、ケースの順序付け、漢字の順序付け、null の順序付けなどの順序付けオプションをデータ ソースで設定できるためです。 データ ソースによっては、これらの順序付けオプションによって CLR とは異なる結果が生成される場合があります。

複数の順序付け操作で同じキー セレクターを指定すると、重複する順序付けが生成されます。 これは無効であり、例外が発生します。

グループ化メソッド

グループ化とは、各グループ内の要素が共通の属性を共有するようにデータをグループに配置することを指します。 グループ化メソッドは GroupBy

グループ化メソッドのほとんどのオーバーロードは、 IEqualityComparer<T>を使用するものを除き、サポートされています。 これは、比較子をデータ ソースに変換できないためです。

グループ化メソッドは、キー セレクターの個別のサブクエリを使用してデータ ソースにマップされます。 キー セレクター比較サブクエリは、 null 値の比較に関連する問題を含め、データ ソースのセマンティクスを使用して実行されます。

集計メソッド

集計操作は、値のコレクションから 1 つの値を計算します。 たとえば、1 か月分の 1 日の温度値から 1 日の平均温度を計算することは、集計操作です。 集計メソッドは、 AggregateAverageCountLongCountMaxMin、および Sumです。

集計メソッドのほとんどのオーバーロードがサポートされています。 null 値に関連する動作の場合、集計メソッドはデータ ソース セマンティクスを使用します。 null 値が関係する場合の集計メソッドの動作は、使用されているバックエンド データ ソースによって異なる場合があります。 データ ソースのセマンティクスを使用した集計メソッドの動作も、CLR メソッドで想定されているものとは異なる場合があります。 たとえば、SQL Server の Sum メソッドの既定の動作では、例外をスローするのではなく、null 値を無視します。

集計によって発生する例外 ( Sum 関数からのオーバーフローなど) は、クエリ結果の具体化中にデータ ソース例外または Entity Framework 例外としてスローされます。

SumAverageなど、シーケンスに対する計算を伴うメソッドの場合、実際の計算はサーバーで実行されます。 その結果、型変換と精度の損失がサーバーで発生する可能性があり、結果は CLR セマンティクスを使用して想定されているものと異なる場合があります。

null/null 以外の値に対する集計メソッドの既定の動作を次の表に示します。

メソッド データなし すべての null 値 いくつかの null 値 null値はありません
Average null を返します。 null を返します。 シーケンス内の null 以外の値の平均を返します。 数値のシーケンスの平均を計算します。
Count 0 を返します。 シーケンス内の null 値の数を返します。 シーケンス内の null 値と null 以外の値の数を返します。 シーケンス内の要素の数を返します。
Max null を返します。 null を返します。 シーケンス内の null 以外の最大値を返します。 シーケンス内の最大値を返します。
Min null を返します。 null を返します。 シーケンス内の null 以外の最小値を返します。 シーケンス内の最小値を返します。
Sum null を返します。 null を返します。 シーケンス内の null 以外の値の合計を返します。 数値のシーケンスの合計を計算します。

型メソッド

型変換とテストを処理する 2 つの LINQ メソッドは、どちらも Entity Framework のコンテキストでサポートされています。 つまり、サポートされている型は、適切な Entity Framework 型にマップされる型だけです。 これらの型の一覧については、「 概念モデル型 (CSDL)」を参照してください。 型メソッドはConvertOfTypeです。

OfType はエンティティ型でサポートされています。 Convert は、概念モデルのプリミティブ型でサポートされています。 C# is メソッドと as メソッドもサポートされています。

ページング メソッド

ページング操作は、シーケンスから 1 つの要素または複数の要素を返します。 サポートされているページング メソッドは、 FirstFirstOrDefaultSingleSingleOrDefaultSkip、および Takeです。

関数をデータ ソースにマップできないか、データ ソースのセットの暗黙的な順序が不足しているため、多くのページング メソッドはサポートされていません。 既定値を返すメソッドは、概念モデルのプリミティブ型と null 既定値を持つ参照型に制限されます。 空のシーケンスで実行されるページング メソッドは null を返します。

こちらも参照ください