如何通过linq获得产品颜色?

时间:2016-01-17 10:25:21

标签: c# linq

我的颜色类是

python: can't open file 'setup.py': [Errno 2] No such file or directory

我的产品类是

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; }
    }

如何使用linq获取产品颜色并将其设置为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; } } 属性?

2 个答案:

答案 0 :(得分:4)

您已注意到此类是自动生成的。并且可能,您不想更改它的实现,然后您可以为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();

P.S: 我建议将Colors实体名称更改为Color。您可以在创建实体时在VS中选择此选项。

答案 1 :(得分:2)

您应该Products非虚拟,计算ProductCount或完全删除ProductCount。换句话说,ProductCount不应该是可手动设置的属性,而Products是虚拟的。

我会选择删除ProductCount,因为您图书馆的用户可以随时

myColor.Products.Count

而不是

myColor.ProductCount

如果不希望这样做,请在没有setter的情况下创建一个计算属性:

public int ProductCount => Products.Count; // C# 6

或者如果您使用的是旧语法

public int ProductCount { get { return Products.Count; } }

注意: Color引用具有该颜色的所有产品是非常奇怪的,因为您正在建模的关系采用相反的方式(即&#34; a产品有颜色&#34;而不是相反)。