2011-01-12 63 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()); 
}