繁体   English   中英

使用LINQ和Entity Framework获取延迟加载的子级集合的计数

[英]Get Count of Lazy Loaded Child Collection Using LINQ and Entity Framework

我有一个像这样的课程:

public class Category
{
    public int CategoryId { get; set; }
    [Required]
    public string Name { get; set; }
    [NotMapped]
    public int ProductCount { get; set; }
    public virtual IEnumerable<Product> Products { get; set; }
}

我有一个查询,当前看起来像这样:

context.Categories.SortBy(sortByExpression).Skip(startRowIndex).Take(maximumRows)

我需要在类别网格中包含ProductCount字段。 是否可以扩展此LINQ查询以提供给我ProductCount属性,而无需阅读整个Product集合? 我可以在使用良好的旧SQL的子查询中执行此操作,但是我却无法使用LINQ。

谢谢

这大致就是您要寻找的内容:

context.Categories.SortBy(sortByExpression).Skip(startRowIndex).Take(maximumRows)
    .Select(c => new { c.CategoryId, c.Name, ProductCount = c.Products.Count() });

还是我误解了你的问题?

更新了代码

您的问题还不够清楚,但是如果我理解得很好,那么您想在结果中添加新列,例如productCount,并使用如下所示的SQL查询来完成:

SELECT c.*, , (SELECT COUNT(*) FROM Products p WHERE p.categoryId = c.id) AS productCount FROM
Categories c
WHERE <Conditions>

现在,您希望能够使用linq来做到这一点(如果您的问题确实如此),则可以按照以下步骤进行操作:

List<Category> categoryList = (from c in context.Categories let pCount = c.Products.Count() select
new { categoryId = c.CategoryId, CategoryName = c.Name, productCount = pCount})
.OrderBy([sortByExpression]).Skip([startRowIndex]).Take([maximumRows]).ToList();

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM