我有3个实体,有很多/很多关系:
产品 - < Products_vehicles> - 车辆
1个产品可以有很多车辆
1辆车可以有很多产品
与所有很多/很多关系一样,products_vehicles类被隐藏,并在EF上显示为实体的导航属性 所以我的课程看起来像这样:
public partial class product
public int id { get; set; }
public string part_name { get; set; }
public virtual ICollection<vehicle> vehicles { get; set; }
public partial class vehicle
{
public int id { get; set; }
public string make { get; set; }
public string model { get; set; }
public virtual ICollection<product> products { get; set; }
我可以轻松获得产品和所有相关车辆
我希望按照车辆的品牌,型号对产品进行分组,所以我的输出看起来像这样:
产品编号:5 part_name:门 make:福特 模特:专注
产品编号:5 part_name:门 制作:萨博 型号:9-3
这可能吗?
为了更清楚,这是一个例子:
所以,假设我有一款名为'bonnet'的产品,它适用于5种不同的车型:
目前,我正在购买1款产品,其中包含列出以上所有5种车型的车辆。
我希望它们首先分为'partname'(引擎盖),其次是'make',第三是'model'。结果应该是:
Bonnet > Ford, Fiesta 2L
Ford, Fiesta 1.6L
Bonnet > Ford, Mondeo 2L
Ford, Mondeo 1.8L
Bonnet > Ford, Focus 1.6L
这在SQL中非常简单,但我很难在Linq中解决这个问题。
任何帮助非常感谢
答案 0 :(得分:0)
我猜你想要的是检索已经选择的平面记录:产品ID,产品部件名称,车辆制造商和车辆型号。如果没有,请忽略该答案。
return dbcontext.products.SelectMany(
p => p.vehicles.Select(
v => new {
product_id = p.id,
part_name = p.part_name,
make = v.make,
model = v.model
}
)
);
如果您不想重复产品数据(实际上非常推荐),那么您可以使用嵌套车辆数组的以下方法:
return dbcontext.products.Select(
p => new {
product_id = p.id,
part_name = p.part_name,
vehicles = p.vehicles.Select(
v => new { make = v.make, model = v.model }
}
);
dbcontext.products
是与数据库中的产品对应的DbSet;它可能在您的代码中以不同方式调用。
干杯〜!