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

Posted

技术标签:

【中文标题】如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录【英文标题】:how to select records from multiple table with max count value from one table using Linq in Asp.net MVC C# 【发布时间】:2019-03-27 12:47:35 【问题描述】:

我有 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(); 返回视图(查询);

【问题讨论】:

图片多了,你想怎么办?取第一个(无论“第一个”是什么意思),忽略所有,别的? 显然Model(= tbl_model 中的一项)有零个或多个图像(来自 tbl_imgs)。你写道:“我想展示该类别的所有产品及其图像。问题是我只想要该视图中的单个图像。”产品是否与tbl_model 中的行相同?如果你有一个类别的产品,你想要它的所有图像,还是只需要它的一个图像。和哪一个?最新的?最大的?不管是哪一个? @Hans 并感谢您的回复先生,我想要的是从 tbl_Model 获取所有记录并从 tbl_ModelImg 获取该模型的单个记录(具有多个图像) Sir @Harald 感谢您的回复,tbl_Model 包含该产品的记录...而 tbl_ModelImg 包含该产品的图像.. 我只想从 tbl_Model 检索所有记录和单个记录来自 tbl_ModelImg 的模型。 【参考方案1】:

将 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 连接的项目,那么您就拥有了所需的内容。

【讨论】:

【参考方案2】:
                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();

【讨论】:

以上是关于如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net mvc C# 中使用 paypal 交易的交易 ID 获取交易详情?

如何在 C# 页面 ASP.NET Core MVC 上使用 SignInManager 和 Usermanager

如何在 C# 和 ASP.NET MVC 中读取/写入 cookie

如何从 ASP.net MVC 程序中获取纯 c# 程序中的 JSON 数据?

如何确定在 C# ASP.NET CORE MVC 5.0 中选择了哪个单选按钮

如何缓存数据库表以防止在 Asp.net C# mvc 中出现许多数据库查询