0

我有两个实体

A:

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

乙:

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

我如何使用 NHibernate ICriteria 选择仅包含图片数量大于 0 的产品的列表

问候凯尔德

4

2 回答 2

0

您需要为此使用条件查询。您可以使用简单的 Linq 来完成

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

请注意其中使用 Any 比执行 count > 0 更快。

抱歉,我有点忘了你是从分贝中检索它的。在这种情况下,您需要执行以下操作。

public IEnumerable<Product> GetProductWithPictures()
{
    return Session.Linq<Product>.Where(x=>x.Pictures.Any());
}
于 2011-01-12T16:56:45.090 回答
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 限制

于 2011-01-12T11:48:03.190 回答