1

PreprocessQuery メソッドを使用して、lightswitch のクエリを拡張します。このようなもの:

query = (from item in query where (validIDs.Contains(item.tableIDs.myID)) && elementCount[item.ID] <= maxEleCount) select item);

validIDsはHashSet(int)であり、elementCountDictionary (int, int)です。最初の where 句は正常に機能していますが、2 番目の -> elementCount[item.ID] <= maxEleCount は機能していません。

私がしたいのは、いくつかのID (validID) でテーブルをフィルタリングし、別のテーブルでこの ID ごとのエントリ数が制限を超えていないかどうかも確認することです。

何か案は?

編集 私は解決策を見つけました。Dictionary の代わりに、2 番目の where 句に HashSet も使用しました。何らかの理由で LINQ ステートメント内で Dictionary ルックアップを実行できないようです (?)

4

1 に答える 1

2

まず、少し衒学的ですが、PreProcessQueryメソッドで行っていることは、クエリ内のレコードを「制限」することであり、クエリを「拡張」することではありません。

LING クエリに入れるものは、Entity Framework データ プロバイダー(LS の場合はSQL Server Data Provider ) によって処理できる必要があります。

LINQ クエリのコンパイル中に、実行時に失敗することがあります。これは、データ プロバイダーがそれをデータ ストア (この場合も SQL Server) に表現できないためです。

通常、「プリミティブ」値に制限されているため、辞書の使用が実際に機能すると言わなければ、機能しないと言っていただろう.

静的な (変化しない) 値がある場合はいつでも、LINQ クエリの外部で変数を作成し、LINQ クエリでその変数を使用することをお勧めします。これを行うことで、値を渡すだけで済み、データ プロバイダーは値をデータ ストアに渡す方法を理解しようとする必要がなくなります。

コードをもう一度読むと、これはあなたがしていることではないかもしれませんが、この説明が役立つことを願っています.

于 2012-08-24T02:06:25.017 に答える