4

メソッドを使用してNHibernateを使用したlinqクエリがありSession.Query<T>、このクエリでは、いくつかの複雑なプロパティとコレクションプロパティをフェッチします。知りたいのですが、IN演算子を使用して条件を追加するにはどうすればよいint[]ですか? 私のコードを見てください:

public IEnumerable<Product> GetProducts(int[] idCategories) 
{
    // how to add IN condition here or a subquery 
    var query = Session.Query<Product>()
                   .Where(?????)
                   .Fetch(x=>x.Category)
                   .FetchMany(x=>x.Status).ThenFetch(x=>x.Item);

    return query.ToList();
}

これを取得するためにクエリを実行する別のメソッドint[]があり、ここでそれを適用したいと思います。または、このサブクエリを演算子に追加する方法があれば、IN本当に感謝しています!

OBS: 必要に応じて変換できint[]ますList<int>

編集

int[]次のようなクエリでこれを取得しました。

return session.Query<Category>.Where(...).Select(x => x.Id).ToArray();

2 番目の質問は、このクエリをサブクエリとして追加して、カテゴリ別にフィルター処理するにはどうすればよいですか?

ありがとうございました!

4

3 に答える 3

7

INオペレーターは本当に必要ありません。次のように実行できます。

.Where(x => idCategories.Contains(x.Category))

注:Containsは拡張メソッドです。の using ステートメントがあることを確認する必要がありますが、System.Linqおそらく既に持っています。

于 2012-07-17T14:14:50.327 に答える
2

たとえば、制限を見てください

var query = Session.Query<Product>()
     .Where(Restrictions.In(Projections.Property<Product>x=>x.Id),idCategories))
     .Fetch(x=>x.Category)
     .FetchMany(x=>x.Status).ThenFetch(x=>x.Item);
于 2012-07-17T22:17:03.040 に答える
1

サブクエリについては、サブクエリクラスが必要です

var query = Session.Query<Product>()
               .Where(Subqueries.WhereProperty<Product>(x=>x.Id)...)
               .Fetch(x=>x.Category)
               .FetchMany(x=>x.Status).ThenFetch(x=>x.Item);

詳細については、ここを参照してください

于 2012-07-17T22:25:10.663 に答える