1

我有一门课,例如:

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 查询以在不读取整个 Product 集合的情况下为我提供 ProductCount 属性?我可以使用良好的旧 SQL 在子查询中执行此操作,但使用 LINQ 时我很难过。

谢谢

4

2 回答 2

0

您的问题还不够清楚,但如果我理解得很好,您希望结果中的新列,例如 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();

希望这有帮助。

于 2015-01-12T12:40:14.713 回答
0

这大致是您要查找的内容吗:

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

还是我误解了你的问题?

更新了代码

于 2013-01-16T00:19:50.330 回答