2011-01-12 8 views
0

I持つ二つのエンティティNhibernet SELECT COUNT

A:

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

B:私はより大きいカウントNHibernateのICriteriaは絵と製品のみを含むリストを選択し使用するにはどうすればよい

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

謝辞

答えて

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()); 
}