如何在Asp.net MVC C#中使用Linq从多个表中选择具有最大计数值的记录

时间:2019-03-27 12:47:35

标签: c# asp.net-mvc linq entity-framework-6

我有3张桌子: 1. Tbl_Model, 2. Tbl_ModelImg, 3. Tbl_Category

我想知道如何使用categoryId从这3个表中获取记录。

单个模型可能有多个图像,但是我想用它们的图像显示该类别的所有产品。问题是我只想要该视图中的单个图像。因此,当用户单击该特定模型时,该模型及其所有图像的详细信息将显示在下一个视图中。

以下查询工作正常,但显示所有图像及其型号名称。意思是如果一个模型比类别详细信息页面上有4张图像,它将显示4个具有相同名称和不同图像的项目。

这是模型类:

     public class showdata
       {
        public Tbl_ModelImg tmi { get; set; }
        public Tbl_Model tm { get; set; }
        public Tbl_SubCategory tblsubcategory { get; set; }
        }
    
       public ActionResult Categorydetails(string sid)
            {
            var sId = Int64.Parse(new 
         StandardModule().Decrypt(HttpUtility.UrlDecode(sid.ToString())));


            try
            {
                var query = (from c in db.Tbl_Model

                             join o in db.Tbl_ModelImg
                              on c.Model_Id equals o.Model_Id 
                             join d in db.Tbl_SubCategory on c.SubCategory_Id 
                             equals d.Id
                             where c.SubCategory_Id == sId
                             select new showdata()
                             {
                                 tm = c,
                                 tmi = o,
                                 tblsubcategory = d                  


                             }).OrderByDescending(d => d.tm.Id).ToList();


                    return View(query);
                }

2 个答案:

答案 0 :(得分:0)

将LINQ查询的第二行替换为

join o in db.Tbl_ModelImg.GroupBy(m => m.Model_Id).Select(m => m.First())

GroupBy()Tbl_ModelImg中的Model_Id中的项目分组,然后Select()将所得数据集的内容切至每组中的第一项

一旦where子句将您的结果限制为仅加入正确的SubCategory_Id的那些项,那么您便有了所需的内容。

答案 1 :(得分:0)

                var query = (from c in db.Tbl_Model

                         join o in db.Tbl_ModelImg.GroupBy(m => m.Model_Id).Select(m 
                          => m.FirstOrDefault())
                          on c.Model_Id equals o.Model_Id 
                         join d in db.Tbl_SubCategory on c.SubCategory_Id equals d.Id
                         where c.SubCategory_Id == sId
                         select new showdata()
                         {
                             tm = c,
                             tmi = o,
                             tblsubcategory = d


                         }).OrderByDescending(d => d.tm.Id).ToList();