我有两个实体
答:
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的产品的列表
关于keld
答案 0 :(得分: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限制
答案 1 :(得分:0)
你需要为此使用标准查询。你可以使用简单的Linq
来做到这一点public IEnumerable<Product> GetProductWithPictures(IEnumerable<Product> allProducts)
{
return allProducts.Where(x=>x.Pictures.Any());
}
注意在那里使用Any比计数更快&gt; 0
抱歉,我忘了你是从dB中检索它的。在这种情况下,您需要做的就是。
public IEnumerable<Product> GetProductWithPictures()
{
return Session.Linq<Product>.Where(x=>x.Pictures.Any());
}