【发布时间】:2020-05-08 17:52:19
【问题描述】:
我正在使用实体框架核心。我有以下实体:
public class Category {
public long Id { get; set; }
public string Name { get; set; }
}
public class Product {
public long Id { get; set; }
public long CategoryId { get; set; }
public string Name { get; set; }
}
我想要一个分组,其中我的键是我的类别,并且我有一个产品列表。我想对数据库运行单个查询来执行此操作。
var data = context.Categories
.Join(
Products,
c => c.Id,
p => p.CategoryId,
(c, p) => new {
Category = c,
Product = p
}
)
.ToList();
这会运行我想要的查询,并且似乎会生成一个带有匿名对象的列表,该对象具有类别和产品。如果我然后执行以下操作,它会做我想要的:
var grouped = data.GroupBy(x => new { x.Category });
键很好,但值列表似乎重复了类别。有没有办法做到这一点,所以我有一个类别的键,然后值是产品对象的列表?更喜欢方法语法,但在这一点上,如果有人能得到我,我希望能弄清楚查询语法。
【问题讨论】:
-
我猜,你应该为
Category类覆盖Equals和GetHashCode以使其正确地与分组一起工作 -
从:x.Category 到:x.Category.Id
-
添加导航属性,您将免费获得。