【问题标题】:C# Using LINQ to select max ID of rowC# 使用 LINQ 选择行的最大 ID
【发布时间】:2014-01-19 01:09:18
【问题描述】:

我有一个面包屑表,我想返回最近插入的行。在 SQL 中,它将是一个 MAX() 函数,但不确定如何在 LINQ 中执行等效操作。基本上我想选择具有最高BreadCrumbID WHERE ProjectID = 49 的行。

这是我现在的查询,它将选择所有行 WHERE ProjectID = 49。我想选择BreadCrumbID 最高的行。

谢谢!

代码:

using (dbPSREntities5 myEntities = new dbPSREntities5())
{
   var currentStatus = (from tbBreadCrumb in myEntities.tbBreadCrumbs.Where(x => x.ProjectID == 49)
                        select new
                        {
                           Status = tbBreadCrumb.BreadCrumbID,
                        });
}

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    试试这个:

    using (dbPSREntities5 myEntities = new dbPSREntities5())
        {
            var currentStatus = (from tbBreadCrumb in myEntities.tbBreadCrumbs.Where(x => x.ProjectID == myEntities.tbBreadCrumbs.Max(b=>b.ProjectId))
                                  select new
                                  {
                                      Status = tbBreadCrumb.BreadCrumbID,
                                  });
    
        }
    

    【讨论】:

    • 这似乎很接近......我错过了什么?来自 myEntities.tbBreadCrumbs.Where(x => x.ProjectID == tbProject.ProjectID).Max(x => x.BreadCrumbID) 中的 tbBreadCrumb;
    【解决方案2】:

    试试下面的查询

    var currentStatus = 
      from x in myEntities.tbBreadCrumbs
      where x.ProjectID == 49
      orderby x.BreadCrumbID desc
      select x.BreadCrumbID;
    

    该查询中的第一个结果将是最高的 BreadCrumbID 值,其中 ProjectID 为 49

    【讨论】:

    • +1:请注意,即使没有与ProjectID == 49 匹配的记录,此解决方案也将起作用。没有返回记录时,使用Max 的解决方案将失败。
    • 有没有办法让 LINQ 编写代码来指示数据库返回最大值?也就是说,有没有办法编写一个 LINQ,它可以转换为类似于此 T-SQL 命令的内容:`select max(BreadCrumbID) from [tbBreadCrumbID] where ProjectID = 49'?这里的结果是一个值,最高的 BreadCrumbID。这似乎比接收所有 BreadCrumbID 更快(即使数据库进行了排序,正如您的查询所期望的那样)。 (PS:我一直在使用与您使用相同的策略来获得最大值结果。仍在寻找生成上述 T-SQL 的 LINQ)
    【解决方案3】:

    此查询应为您提供 ProjectID = 4 的最高 BreadCrumbId

    using (dbPSREntities5 myEntities = new dbPSREntities5())
    {
        var highestId = myEntities.tbBreadCrumbs.Where(x => x.ProjectID == 49)
                                                .Max(x => x.BreadCrumbID);
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用Max() linq 扩展方法

      var crum = myEntities.tbBreadCrumbs.Max(d=>d.breadcrumbId)
      

      【讨论】:

      • 请注意,如果tbBreadCrumbs 没有对象(行),Max 将抛出异常。
      【解决方案5】:

      Var highestId = myEntities.breadcrumbs.lastOrDefault(x=>x.ProjectId== 49)

      【讨论】:

        【解决方案6】:

        试试这个,如果 ProjectID=49 中没有 BreadCrumb,它将给出 0 或给出 max BreadCrumbID

        using (dbPSREntities5 myEntities = new dbPSREntities5())
        {
            var query=myEntities.tbBreadCrumbs.Where(x => x.ProjectID == 49);
            var highestId = query.Any() ? query.Max(x => x.BreadCrumbID) : 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-26
          • 2021-07-21
          • 1970-01-01
          • 2011-02-22
          • 2021-08-10
          • 2022-12-07
          • 1970-01-01
          相关资源
          最近更新 更多