0

私は2つのエンティティを持っています

A:

public class Product
{
    public virtual int ID { get; set; }
    public virtual IList<Picture> Pictures { get;set;}
}

B:

public class Picture
{
    public virtual int ID { get;set;}
    public virtual Product { get;set;}
    public virtual Path { get;set;}
}

NHibernate ICriteria を使用して、画像数が 0 より大きい製品のみを含むリストを選択する方法

よろしくケルド

4

2 に答える 2

0

このために基準クエリを使用する必要があります。単純なLinqを使用してそれを行うことができます

public IEnumerable<Product> GetProductWithPictures(IEnumerable<Product> allProducts)
{
    return allProducts.Where(x=>x.Pictures.Any());
}

カウント>0を実行するよりも高速な、内部でのAnyの使用に注意してください。

申し訳ありませんが、dBから取得していることをちょっと忘れてしまいました。その場合に必要なことは次のとおりです。

public IEnumerable<Product> GetProductWithPictures()
{
    return Session.Linq<Product>.Where(x=>x.Pictures.Any());
}
于 2011-01-12T16:56:45.090 に答える
0

写真の正確な値が必要な場合は、これを使用できます。

Product productAlias = null;  
var criteria = CurrentSession.CreateCriteria(typeof(Product), () => productAlias);
ICriteria productsCriteria = criteria.CreateCriteria<Product>(x => x.Pictures);

DetachedCriteria picturesCount = DetachedCriteria.For<Picture>();
picturesCount.SetProjection(Projections.RowCount());
picturesCount.Add<Picture>(x => x.Product.ID == productAlias.ID);

productsCriteria.Add(Subqueries.Gt(/*number of pictures*/, picturesCount));


return criteria.List<Customer>();

コレクションを空にする必要がない場合は、IsNotEmpty制限を使用できます

于 2011-01-12T11:48:03.190 に答える