linq(クエリ構文)の範囲変数をパラメーターとして使用することは可能ですか?

フレドゥ

linqクエリの範囲変数をパラメーターとして使用しようとしています。

のような簡単なもの;

private static Expression<Func<context.Table1, bool>> funstuff(context.Table2 data)
{
    return x => true;
}

別の簡単な例のように、クロス結合を使用します。

var fun = from table2 in context.Table2
          from table1 in context.Table1.Where(funstuff(table2))
          select table1;

var f = fun.ToList();

そして、私はこのエラーが発生しています。

タイプ 'context.Table2'の変数 'table2'がスコープ ''から参照されていますが、定義されていません

エンティティフレームワーク6でパラメータとして範囲変数を使用することは可能ですか?

編集

コンテキストはエンティティフレームワークのdbcontextです

この正確なコードは機能します。

var fun = from table2 in context.Table2
          from table1 in context.Table1.Where(x => table2.Id == 1)
          select table1;

var f = fun.ToList();

これは機能しません。

private static Expression<Func<context.Table1, bool>> funstuff(context.Table2 data)
{
    return x => data.Id == 1;
}



var fun = from table2 in context.Table2
          from table1 in context.Table1.Where(funstuff(table2))
          select table1;

var f = fun.ToList();

私はそれがうまくいくと思っていました。

ハラルドコププールス

私はあなたcontextがであると思いますDbContext

ほとんどの関数は似ていますが、との間には違いがQueryableありEnumerableます。

IEnumerableオブジェクトには、ローカルメモリにあるコレクション内のオブジェクトを列挙するためのすべてのコードが含まれています。IEnumerableオブジェクトは、ローカル関数を列挙しながら使用できます。

クエリ可能な列挙は、他のプロセッサで実行されることを意図しています。IQueryableオブジェクトには、他のプロセッサが理解できる形式に変換できる式が含まれています。

この翻訳は、Expressionではなく、IQueryable:の別のプロパティにありますProviderProviderどのタイプのマシン上で知ってExpression実行されます。要求に応じて、Providerはこの式をこのマシンが理解できる形式に翻訳(コンパイル)し、翻訳をこのマシンに送信します。

オブジェクトはをcontext.Table2実装しIQueryableます。のプロバイダーは、IQueryableクエリをSQLに変換する方法を知っています。SQLはfunstuff、のような個人的な関数をProvider知らないため、SQLに変換する方法を知りません。実際、DbSetはすべての種類のLINQメソッドをサポートしているわけではありません。

MSDN:サポートされているおよびサポートされていないLINQメソッド(LINQ to Entities)を参照してください

したがって、ステートメントがIQuery可能である限り、ローカル関数を呼び出すことはできません。

ローカル関数を呼び出すことが本当に重要な場合は、として実行できますIEnumerableこれは、関数AsEnumerableを使用して行います。これにより、の入力データがAsEnumerableローカルメモリに送られます。その後、クエリがであるかのようにすべてのローカル関数を呼び出すことができますIEnumerable

ただし、パフォーマンス上のリスクがあります。入力が数千のオブジェクトであり、最終的に少数のオブジェクトしか得られない場合、このすべての情報をローカルメモリに取り込むのは無駄です。

結論:を呼び出す前に、ローカルメモリに転送されるデータを最終結果で必要となるサイズに制限するようにしてくださいAsEnumerableその後、必要なローカル関数を呼び出すことができます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クエリキーパラメータを変数として使用することは可能ですか?

分類Dev

可変数のURIパラメーターを使用してJAX-RSメソッドを構成することは可能ですか?

分類Dev

LINQクエリ構文をメソッド構文に変換する方法は?(結合と複数選択あり)問題:ここで-+ 3パラメーターのオーバーロードはありません

分類Dev

構文パラメーターを使用して構文を置き換えることはできますか?

分類Dev

一見同じ範囲のパラメーターとしてこのジェネリックを使用できないのはなぜですか?

分類Dev

Modelicaのパラメータを介して変数タイプを設定することは可能ですか?

分類Dev

関数内の変数をjavascriptのパラメーターとして渡すことは可能ですか?

分類Dev

javascript関数のパラメーターとして変数を渡すことは可能ですか?

分類Dev

クラスメンバーの識別子として変数を使用することは可能ですか?

分類Dev

構造体のメンバー変数をパラメーターとして渡すことは可能ですか?

分類Dev

withステートメントの一時オブジェクトを関数のパラメーターとして使用することは可能ですか?

分類Dev

withステートメントの一時オブジェクトを関数のパラメーターとして使用することは可能ですか?

分類Dev

ラムダの環境変数でSSMパラメーターを使用することは可能ですか?

分類Dev

Pythonで2つの異なるリストの要素を関数パラメーターとして使用することは可能ですか?

分類Dev

Power BI Desktopのマトリックスで数値範囲スライサーとフィルターデータを作成することは可能ですか?

分類Dev

Vueの口ひげの構文-オブジェクトのキーとして変数を使用することは可能ですか?

分類Dev

パラメータ化されたクエリを使用してBACKUPステートメントを実行することは可能ですか?

分類Dev

C ++のデフォルト引数でテンプレートパラメータをスキップすることは本当に不可能ですか、なぜ構文はそうではないことを示唆していますか?

分類Dev

配列を関数のパラメーターのリストに変えることは可能ですか?

分類Dev

array_mapへの呼び出し可能なパラメーターとしてクラスメソッドを使用することは可能ですか?

分類Dev

パラメータ化されたクエリPostgresqlでts_statを使用することは可能ですか?

分類Dev

パラメータ化されたクエリPostgresqlでts_statを使用することは可能ですか?

分類Dev

動的PowerShellスクリプトの入力パラメーターとしてコマンドレットを使用することは可能ですか?

分類Dev

パラメータを使用してbashエイリアスを作成し、別のコマンドを追加することは可能ですか?

分類Dev

MySQLビューで変数またはパラメーターを使用することは可能ですか?

分類Dev

Linqクエリ構文内でParameterExpressionを参照することは可能ですか?

分類Dev

prop-typesを使用して、通常のオブジェクト、関数パラメーター、および戻り値をtypeCheckすることは可能ですか?

分類Dev

ジェネリックのtypeパラメーターを使用して配列のサイズを制御することは可能ですか?

分類Dev

<script> src JavaScript URLのクエリパラメータを取得することは可能ですか?

Related 関連記事

  1. 1

    クエリキーパラメータを変数として使用することは可能ですか?

  2. 2

    可変数のURIパラメーターを使用してJAX-RSメソッドを構成することは可能ですか?

  3. 3

    LINQクエリ構文をメソッド構文に変換する方法は?(結合と複数選択あり)問題:ここで-+ 3パラメーターのオーバーロードはありません

  4. 4

    構文パラメーターを使用して構文を置き換えることはできますか?

  5. 5

    一見同じ範囲のパラメーターとしてこのジェネリックを使用できないのはなぜですか?

  6. 6

    Modelicaのパラメータを介して変数タイプを設定することは可能ですか?

  7. 7

    関数内の変数をjavascriptのパラメーターとして渡すことは可能ですか?

  8. 8

    javascript関数のパラメーターとして変数を渡すことは可能ですか?

  9. 9

    クラスメンバーの識別子として変数を使用することは可能ですか?

  10. 10

    構造体のメンバー変数をパラメーターとして渡すことは可能ですか?

  11. 11

    withステートメントの一時オブジェクトを関数のパラメーターとして使用することは可能ですか?

  12. 12

    withステートメントの一時オブジェクトを関数のパラメーターとして使用することは可能ですか?

  13. 13

    ラムダの環境変数でSSMパラメーターを使用することは可能ですか?

  14. 14

    Pythonで2つの異なるリストの要素を関数パラメーターとして使用することは可能ですか?

  15. 15

    Power BI Desktopのマトリックスで数値範囲スライサーとフィルターデータを作成することは可能ですか?

  16. 16

    Vueの口ひげの構文-オブジェクトのキーとして変数を使用することは可能ですか?

  17. 17

    パラメータ化されたクエリを使用してBACKUPステートメントを実行することは可能ですか?

  18. 18

    C ++のデフォルト引数でテンプレートパラメータをスキップすることは本当に不可能ですか、なぜ構文はそうではないことを示唆していますか?

  19. 19

    配列を関数のパラメーターのリストに変えることは可能ですか?

  20. 20

    array_mapへの呼び出し可能なパラメーターとしてクラスメソッドを使用することは可能ですか?

  21. 21

    パラメータ化されたクエリPostgresqlでts_statを使用することは可能ですか?

  22. 22

    パラメータ化されたクエリPostgresqlでts_statを使用することは可能ですか?

  23. 23

    動的PowerShellスクリプトの入力パラメーターとしてコマンドレットを使用することは可能ですか?

  24. 24

    パラメータを使用してbashエイリアスを作成し、別のコマンドを追加することは可能ですか?

  25. 25

    MySQLビューで変数またはパラメーターを使用することは可能ですか?

  26. 26

    Linqクエリ構文内でParameterExpressionを参照することは可能ですか?

  27. 27

    prop-typesを使用して、通常のオブジェクト、関数パラメーター、および戻り値をtypeCheckすることは可能ですか?

  28. 28

    ジェネリックのtypeパラメーターを使用して配列のサイズを制御することは可能ですか?

  29. 29

    <script> src JavaScript URLのクエリパラメータを取得することは可能ですか?

ホットタグ

アーカイブ