2011-07-15 8 views
0

ユーザ入力からキー値のコレクションを受け入れる必要があります。次に、コレクションにキーが含まれるすべての行を選択するL2Eデータストアでクエリを実行する必要があります。私がこれまで持っている最高のは、次のとおりです。Linqからエンティティを使用してデータストアから多数の行を選択

var lines = dataStore.Entities.ToList(); /* To List to force a query */ 
var selectedLines = lines.Where(line=> inputValues.Contains(line.key)).Distinct(); 

しかし、これは我々が(おそらく)の行だけの小さな数を選択するために、データ・ストア全体を引っ張っているので、無駄なようだそうです。各キー値(列がインデックスされています)に一致する個別のクエリを実行することは無駄が少なくなるでしょうか、Linq構文で私が見逃したより良い方法がありますか?

+0

なぜ強制的にクエリを実行しますか?これの背後には要件がありますか? – thekip

+0

@thekip:はい、あります。クエリが強制されない限り、L2Eは.Containsメソッドを式にレンダリングしようとし、失敗します。私はまだL2E版の回答を待っているので、回答に返答することができます。 – Kivin

答えて

1

EF4はcontainsをサポートしていますので、直接使用することができます。

var selectedLines = dataStore.Entities 
          .Where(line=> inputValues.Contains(line.key)) 
          .Distinct(); 

以前のバージョンの可能性のある対処方法については、this SO questionを参照してください。

0

最初のクエリでcontainsを使用する必要があります。
これは、ユーザーが指定した値だけを返します。
私はまたLinqPad非常に素晴らしいツールを見て、どのようなクエリがエンティティにLinqによって作成されているかを示すことをお勧めします。

var lines = (from p in dataStore.Entities 
      where inputValues.Contains(p.key) 
      select p).ToList(); 
関連する問題