C# 如何在LINQ中选择多个包含项?

C# 如何在LINQ中选择多个包含项?,c#,asp.net-mvc,linq,asp.net-mvc-4,C#,Asp.net Mvc,Linq,Asp.net Mvc 4,我的产品类别是 public class Product { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ProductID { get; set; } public string ProductName { get; set; } public virtual ICollection<ProductColor> ProductC

我的产品类别是

public class Product
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public virtual ICollection<ProductColor> ProductColors { get; set; }
}
假设我的产品模型包含

ProductID    ProductName
1            Product 1
2            Product 2
3            Product 3
ProductID ColorID
1         1
1         2
2         3
我的颜色模型包含

ColorID  ColorName
1        Red
2        Green
3        Blue
中间模型包含

ProductID    ProductName
1            Product 1
2            Product 2
3            Product 3
ProductID ColorID
1         1
1         2
2         3

如何编写Linq查询以获取列表中每个产品的所有颜色

这应该满足您的需要:

var res = Products.Select(s => new{ Product = s, Colors = s.ProductColors.Select(m => m.Color) }).ToList();
这将生成具有两个属性的匿名类型:
Product
和该产品具有的
Color
s数组

或者您可以删除
ProductColor
实体,将
Product
更改为:

public class Product
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public virtual ICollection<Color> Colors { get; set; }
}
public class Color
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ColorID { get; set; }
    public string ColorName { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}
然后您就已经有了带有
颜色的
产品了。

Ok。 这就是我要找的

var Colors =  context.Products.SelectMany(p => p.Colors);
并按ProductID进行筛选

var Colors =  context.Products.Where(p => p.ProductID == 1).SelectMany(p => p.Colors);

你有多对多的关系。使用EF,您不必在上下文中包含
ProductColor
实体。那么你就不需要任何查询就可以得到你想要的东西了。@ieagle我真的被这个问题困住了。我不能在我的上下文中包含中间实体。你是什么意思
ProductColor
是您的链接实体,它似乎已经被添加(从您的代码判断)。我想我做错了什么,因为我得到了错误…'Models.Products不包含“ProductColor”的定义,并且找不到接受类型为“Models.Products”的第一个参数的扩展方法“ProductColor”(您是否缺少using指令或程序集引用?看起来中间表隐藏在实体框架内。无论如何,问题已经解决,您的答案非常有用。我确实解决了问题,请检查我发布的答案。我只是不太明白为什么中间表“隐藏”.我最好从你发布的链接开始阅读。谢谢你的努力。祝你愉快:)