我如何选择许多包含在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查询以获取列表中每个产品的所有颜色?
这应该可以满足您的需求:
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);