Nhibernet 选择计数

发布于 2024-10-11 07:19:22 字数 419 浏览 8 评论 0原文

我有两个实体

A:

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 的产品的

列表

I have two entity

A:

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

How do i using NHibernate ICriteria select a list containing only products with a picture count larger than 0

regards keld

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剩一世无双 2024-10-18 07:19:22

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

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

If you need some exact value of pictures you can use this:

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

If you just need not empty collection then you can use IsNotEmpty restriction

丑疤怪 2024-10-18 07:19:22

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

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

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

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

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

you dint need to use a criteria query for this. You can do it using simple Linq

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

Note the use of Any inside there which is faster than doing a count > 0.

Sorry I kinda forgot you are retrieving it from the dB. Here is what you need to do in that case.

public IEnumerable<Product> GetProductWithPictures()
{
    return Session.Linq<Product>.Where(x=>x.Pictures.Any());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文