Scott Guthrieのブログ投稿で紹介されているDynamicQueryable Linq拡張機能を使用しています。
ドキュメントには、サポートされている演算子の表があります。主な演算子の1つは次のとおりです。
x […]配列またはインデクサーへのアクセス。多次元配列はサポートされていません。
しかし、私はそれがどのように使用されるのか理解できません。
以下のいずれも機能しないと思っていましたが、実際には機能しません。
var ctx = new MyDbContext();
var parameters = new Object[] { new int[] { 1, 2, 3 } };
var qry = ctx.Set<User>().Where<User>("it.Id in @0", parameters);
var qry = ctx.Set<User>().Where<User>("it.Id.In(@0)", parameters);
var qry = ctx.Set<User>().Where<User>("it.Id = @0", parameters);
var qry = ctx.Set<User>().Where<User>("@0.Contains(it.Id)", parameters);
基本的にはInクエリですが、どう表現するかわかりません。
これはおそらく誤解です。つまり、特定のインデックス位置にあるコレクション要素をクエリすることが可能です。例えば:
public class Order
{
public List<OrderDetail> OrderDetails { get; set; }
}
public class OrderDetail
{
public string Description { get; set; }
}
次に、3番目のOrderDetailに詳細説明「Bicycle」が含まれるすべての注文をクエリできます。
string parameter = "Bicycle";
var qry = ctx.Set<Order>().Where<Order>("it.OrderDetails[2].Description == @0",
parameter);
あなたの目的のために、パラメータなしで「OR」チェーン"it.Id == 1 or it.Id == 2 or it.Id == 3"
構築する(またはこのクエリ文字列をループで動的に構築する)必要があると思いますWhereメソッド内。