【问题标题】:getting the MAX() value using LINQ [duplicate]使用 LINQ 获取 MAX() 值
【发布时间】:2014-01-19 11:50:41
【问题描述】:

当我返回多行时,我试图从表 tbBreadCrumb 中选择 BreadCrumbID 的最大值。现在我将表 tbBreadCrumb 加入表 tbProjects。如果 tbBreadCrumb 中有多个条目,我将返回多个条目。但我只想选择 tbBreadCrumb 中 BreadCrumbID 最高的行。

这是我的代码:

using (dbPSREntities5 myEntities = new dbPSREntities5())
    {
        var allDepartments = (from tbProject in myEntities.tbProjects
                              from tbBreadCrumb in myEntities.tbBreadCrumbs.Where(x => x.ProjectID == tbProject.ProjectID) <--- I want to put some sort of Max() function here where it will only slect the row with the max BreadCrumID in the table tbBreadCrumb
                              from refBreadCrumb in myEntities.refBreadCrumbs.Where(x => x.refBreadCrumbID == tbBreadCrumb.StatusID)
                              // select new anon type
                              select new
                              {
                                  ProjectID = tbProject.ProjectID,
                                  Status = refBreadCrumb.BreadCrumbValue,
                                  DateSubmitted = tbBreadCrumb.CreateDateTime,
                                  refDepartmentID = tbProject.refDepartmentID,
                                  ProjectContactFullName = tbProject.ProjectContactFirstName + " " + tbProject.ProjectContactLastName,
                                  ProjectWorkType = tbProject.ProjectWorkType,
                              });

        projectsListView.DataSource = allDepartments;
        projectsListView.DataBind();
    }

【问题讨论】:

  • 你之前没问过这个吗? stackoverflow.com/questions/21212004/…
  • 是的 - 试图简化第一个代码中的代码,结果把一切都搞砸了,无法得到任何工作的答案。对此感到抱歉。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • @JohnSaunders:从链接中我不明白共识是普遍删除标签。如果你把它留在那里,这是一条很好的路线。如果他们澄清标题,我会赞成他们。
  • @MikeLischke 在这种情况下,在标题中添加“C#”破坏了一个体面的标题

标签: c# linq


【解决方案1】:

你可以试试这个,首先得到最大的BreadCrumbID Id。然后在第二个查询中与where一起使用:

var breadId = myEntities.tbBreadCrumbs.Max(x => x.BreadCrumbID);
var allDepartments = (from tbProject in myEntities.tbProjects
                          from tbBreadCrumb in myEntities.tbBreadCrumbs.Where(x => x.ProjectID == tbProject.ProjectID && x.BreadCrumbID == breadId)
                          from refBreadCrumb in myEntities.refBreadCrumbs.Where(x => x.refBreadCrumbID == tbBreadCrumb.StatusID)
                          // select new anon type
                          select new
                          {
                              ProjectID = tbProject.ProjectID,
                              Status = refBreadCrumb.BreadCrumbValue,
                              DateSubmitted = tbBreadCrumb.CreateDateTime,
                              refDepartmentID = tbProject.refDepartmentID,
                              ProjectContactFullName = tbProject.ProjectContactFirstName + " " + tbProject.ProjectContactLastName,
                              ProjectWorkType = tbProject.ProjectWorkType,
                          });

更新:

var allDepartments = (from tbProject in myEntities.tbProjects
                          from tbBreadCrumb in myEntities.tbBreadCrumbs.Where(x => x.ProjectID == tbProject.ProjectID && x.BreadCrumbID == myEntities.tbBreadCrumbs.Where(y => y.ProjectID == tbProject.ProjectID).Max(y => y.BreadCrumbID))
                          from refBreadCrumb in myEntities.refBreadCrumbs.Where(x => x.refBreadCrumbID == tbBreadCrumb.StatusID)
                          // select new anon type
                          select new
                          {
                              ProjectID = tbProject.ProjectID,
                              Status = refBreadCrumb.BreadCrumbValue,
                              DateSubmitted = tbBreadCrumb.CreateDateTime,
                              refDepartmentID = tbProject.refDepartmentID,
                              ProjectContactFullName = tbProject.ProjectContactFirstName + " " + tbProject.ProjectContactLastName,
                              ProjectWorkType = tbProject.ProjectWorkType,
                          });

【讨论】:

  • 我知道这是如何工作的,但这里的问题是每个 ProjectID 都有不同的最大 BreadCrumbID。这有意义吗?
  • @user1431633 我明白你现在在问什么,我会更新我的问题
  • 我看到这个并认为它应该可以工作,但得到错误:LINQ to Entities 无法识别方法 'Int32 FindMaxId(Int32)' 方法,并且此方法无法转换为存储表达式。
  • 是的,我猜到了那个错误。无论如何,另一种方法是在您的查询中编写该查询。但这真的很混乱 :) 我已经更新了我的问题再试一次
  • 是的,就是这样!非常感谢您的帮助!
猜你喜欢
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多