我有一个类如:
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难以接受。
由于
答案 0 :(得分:0)
这大致是你要找的东西:
context.Categories.SortBy(sortByExpression).Skip(startRowIndex).Take(maximumRows)
.Select(c => new { c.CategoryId, c.Name, ProductCount = c.Products.Count() });
还是我误解了你的问题?
更新了代码
答案 1 :(得分: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();
希望得到这个帮助。