Nhibernate Nhibernet选择计数

Nhibernate Nhibernet选择计数,nhibernate,icriteria,Nhibernate,Icriteria,我有两个实体 A: 如何使用NHibernate ICriteria选择仅包含图片计数大于0的产品的列表 关于海带如果您需要一些精确的图片值,您可以使用: Product productAlias = null; var criteria = CurrentSession.CreateCriteria(typeof(Product), () => productAlias); ICriteria productsCriteria = criteria.CreateCriteria<

我有两个实体

A:

如何使用NHibernate ICriteria选择仅包含图片计数大于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 restriction

您不需要为此使用条件查询。您可以使用简单的Linq实现

public IEnumerable<Product> GetProductWithPictures(IEnumerable<Product> allProducts)
{
    return allProducts.Where(x=>x.Pictures.Any());
}
请注意,使用比计数>0更快的任何内部参数

对不起,我有点忘了你正在从数据库检索它。这是在这种情况下你需要做的事情

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