如何使用 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属性?

如何使用 linq 按产品获取颜色

您已经注意到此类是自动生成的。并且可能,您不想更改它的实现,那么您可以为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来说,引用所有具有该颜色的产品是非常奇怪的,因为您正在建模的关系是相反的(即"产品具有颜色",而不是相反)。