使用LINQ根据外键值对总数进行计数

时间:2018-12-29 04:56:40

标签: linq

我正在尝试执行以下在SQL中完成的操作

SELECT COUNT(*) AS "Total" 
FROM dbo.Items
WHERE CategoryID IN (SELECT CategoryID 
                     FROM Categories
                     WHERE Name = 'Beverages')    

有什么想法可以在LINQ中完成吗?

*更新

Item类代码:

public class Item
    {
        [Key]
        public int ItemID { get; set; }
        public virtual Category Category { get; set; }
        public virtual Brand Brand { get; set; }
        public int CategoryID { get; set; }
        public int BrandID { get; set; }
        [Display(Name ="Product Name")]
        [Required(ErrorMessage = "Product name is required")]
        public string ItemName { get; set; }
        [Display(Name="Product Price")]        
        public decimal? ItemPrice { get; set; }

        [DataType(DataType.ImageUrl)]
        [Display(Name = "Image URL")]
        public string ImageUrl { get; set; }     

    }

Category类代码:

public class Category
    {
        public int CategoryID { get; set; }
        [DisplayName("Category Name")]
        public virtual string Name { get; set; }
        public virtual List<Item> Items { get; set; }
    }

2 个答案:

答案 0 :(得分:0)

更新  型号

public class Item
{
    [Key]
    public int ItemID { get; set; }
    public Category Category { get; set; }
    public int CategoryID { get; set; }
    public int BrandID { get; set; }
    [Display(Name = "Product Name")]
    [Required(ErrorMessage = "Product name is required")]
    public string ItemName { get; set; }
    [Display(Name = "Product Price")]
    public decimal? ItemPrice { get; set; }

    [DataType(DataType.ImageUrl)]
    [Display(Name = "Image URL")]
    public string ImageUrl { get; set; }

}

public class Category
{
    [Key]
    public int CategoryID { get; set; }
    public virtual string Name { get; set; }
    public virtual List<Item> Items { get; set; }
}

使用的数据样本 enter image description here

您想要商品的类别=饮料 您可以从items结束

var itemsCount1 = dbcontext
    .Items
    .Count(x => x.Category.Name == "Beverages");

您可以从categories端开始制作

//如果没有名称为Beverages的类别,则返回0

var itemsCount2 = dbcontext
    .Categories
    .FirstOrDefault(x => x.Name == "Beverages")?.Items?.Count() ?? 0;

查询结果 enter image description here

答案 1 :(得分:0)

您可以通过以下内容获得Count。

var results = Categories.Where(x=>x.Name.Equals("Beverages")
                    .Join(Items,
                    c=>c.CategoryID,
                    i=>i.CategoryID,
                    (c,i)=> i).Count();

对于模拟数据,

var Categories = new List<Category>
{
    new Category{CategoryID =1, Name ="Beverages"},
    new Category{CategoryID =2, Name ="One"},
    new Category{CategoryID =3, Name ="Two"}
};

var Items = new List<Item>
{
    new Item{ItemID=3,CategoryID=4,ItemName="abc1"},
    new Item{ItemID=1,CategoryID=1,ItemName="abc2"},
    new Item{ItemID=1,CategoryID=1,ItemName="abc3"},
    new Item{ItemID=1,CategoryID=1,ItemName="abc4"},
    new Item{ItemID=1,CategoryID=1,ItemName="abc5"},
    new Item{ItemID=2,CategoryID=1,ItemName="abc6"},
    new Item{ItemID=3,CategoryID=4,ItemName="abc7"},
    new Item{ItemID=4,CategoryID=2,ItemName="abc8"},
};

输出: 5

更新

var results = dbContext.Categories.Where(x=>x.Name.Equals("Beverages")
                        .Join(dbContext.Items,
                        c=>c.CategoryID,
                        i=>i.CategoryID,
                        (c,i)=> i).Count();
相关问题