如何使用 linq 按产品获取颜色
本文关键字:获取 颜色 何使用 linq | 更新日期: 2023-09-27 18:30:39
My colors class is
public partial class Colors
{
public Colors()
{
this.Products = new HashSet<Products>();
}
public int ColorID { get; set; }
public string Hex { get; set; }
public string ColorName { get; set; }
public int ProductCount { get; set; }
public virtual ICollection<Products> Products { get; set; }
}
我的产品类别是
public partial class Products
{
public Products()
{
this.Colors = new HashSet<Colors>();
}
public int ProductID { get; set; }
public string Name { get; set; }
public virtual ICollection<Colors> Colors { get; set; }
}
如何使用 linq 按产品获取颜色并将其设置为ProductCount
属性?
您已经注意到此类是自动生成的。并且可能,您不想更改它的实现,那么您可以为Colors
类意图添加扩展方法并删除 ProductCount
属性:
public partial class Colors
{
public Colors()
{
this.Products = new HashSet<Products>();
}
public int ColorID { get; set; }
public string Hex { get; set; }
public string ColorName { get; set; }
public virtual ICollection<Products> Products { get; set; }
}
public static class EntityExtensions
{
public static int GetProductCount(this Colors colors)
{
return colors.Products.Count();
}
}
然后将其用作:
var productCOunt = colors.GetProductCount();
PS:我建议Colors
实体名称更改为Color
。创建实体时,可以在 VS 中选择此选项。
你应该Products
设为非虚拟的,使ProductCount
计算,或者完全删除ProductCount
。换句话说,当Products
是虚拟的时,ProductCount
不应保持可手动设置的属性。
我会选择删除ProductCount
,因为您的库的用户总是可以这样做
myColor.Products.Count
而不是
myColor.ProductCount
如果不希望这样做,请创建一个不带资源库的计算属性:
public int ProductCount => Products.Count; // C# 6
或者如果您使用的是旧语法
public int ProductCount { get { return Products.Count; } }
注意:对于Color
来说,引用所有具有该颜色的产品是非常奇怪的,因为您正在建模的关系是相反的(即"产品具有颜色",而不是相反)。