我如何选择许多包含在LINQ

本文关键字:许多包 LINQ 选择 何选择 | 更新日期: 2023-09-27 18:16:09

My Product class is

public class Product
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public virtual ICollection<ProductColor> ProductColors { get; set; }
}

Color类

public class Color
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ColorID { get; set; }
    public string ColorName { get; set; }
    public virtual ICollection<ProductColor> ProductColors { get; set; }
}

和用于创建多对多关系的中间类

public class ProductColor
{
    public int ProductID { get; set; }
    public int ColorID { get; set; }
    public virtual Product Product { get; set; }
    public virtual Color Color { get; set; }
}

假设我的产品模型包含

ProductID    ProductName
1            Product 1
2            Product 2
3            Product 3

我的颜色模型包含

ColorID  ColorName
1        Red
2        Green
3        Blue

中间模型包含

ProductID ColorID
1         1
1         2
2         3

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

我如何选择许多包含在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; }
}

Color to:

public class Color
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ColorID { get; set; }
    public string ColorName { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}

然后你已经有了Product s和Color s。

好的。这就是我要找的

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

和ProductID

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