0

ScottGuthrieのブログ投稿で紹介されているDynamicQueryableLinq拡張機能を使用しています。

ドキュメントには、サポートされている演算子の表があります。主な演算子の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クエリですが、表現方法がわかりません。

4

1 に答える 1

0

これはおそらく誤解です。つまり、特定のインデックス位置にあるコレクション要素を照会できるということです。例えば:

public class Order
{
    public List<OrderDetail> OrderDetails { get; set; }
}

public class OrderDetail
{
    public string Description { get; set; }
}

次に、次の方法で、3番目のOrderDetailに詳細説明「自転車」があるすべての注文を照会できます。

string parameter = "Bicycle";
var qry = ctx.Set<Order>().Where<Order>("it.OrderDetails[2].Description == @0",
    parameter);

あなたの目的のため"it.Id == 1 or it.Id == 2 or it.Id == 3"に、Whereメソッドのパラメーターなしで「OR」チェーンを構築する(またはこのクエリ文字列をループで動的に構築する)必要があると思います。

于 2011-03-21T21:02:02.257 に答える