2011-01-12 64 views
0

我有两个实体Nhibernet SELECT COUNT

答:

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

如果你需要图片的一些精确值,你可以使用这个:

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限制

0

你力需要使用条件查询此。您可以使用简单的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()); 
}