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

问题描述

我有 3 个表:1. Tbl_Model,2. Tbl_ModelImg,3. Tbl_Category

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

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

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

这是模型类:

     公开课展示数据
       {
        公共 Tbl_ModelImg tmi { 获取;放; }
        公共 Tbl_Model tm { 获取;放; }
        公共 Tbl_SubCategory tblsubcategory { 获取;放; }
        }
    
       公共 ActionResult 类别详细信息(字符串 sid)
            {
            var sId = Int64.Parse(新
         StandardModule().Decrypt(HttpUtility.UrlDecode(sid.ToString())));


            尝试
            {
                var query = (来自 db.Tbl_Model 中的 c

                             在 db.Tbl_ModelImg 中加入 o
                              在 c.Model_Id 上等于 o.Model_Id
                             在 c.SubCategory_Id 上的 db.Tbl_SubCategory 中加入 d
                             等于 d.Id
                             其中 c.SubCategory_Id == sId
                             选择新的显示数据()
                             {
                                 tm = c,
                                 tmi = o,
                                 tbl子类别 = d                  


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


                    返回视图(查询);
                }

标签: c#asp.net-mvclinqentity-framework-6

解决方案


将 LINQ 查询的第二行替换为

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

GroupBy()将对项目进行分组Tbl_ModelImgModel_Id然后将Select()结果数据集的内容缩减为每个组中的第一个项目。

一旦该where子句将您的结果限制为那些正确连接的项目,SubCategory_Id那么您就拥有了您需要的东西。


推荐阅读