2014-01-19 35 views
1

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

下面是我现在要查询的所有行的查询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, 
         }); 
} 

回答

4

试试这个:

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, 
           }); 

    } 
+0

这似乎是接近...我错过了什么?来自于myEntities.tbBreadCrumbs.Where中的tbBreadCrumb(x => x.ProjectID == tbProject.ProjectID).Max(x => x.BreadCrumbID); – user1431633

2

该查询应该让你的最高BreadCrumbId其中专案编号= 4

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

尝试以下查询

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

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

+1

+1:请注意,即使没有与“ProjectID == 49”匹配的记录,该解决方案也能正常工作。当没有记录返回时,使用'Max'的解决方案将失败。 – wdosanjos

+0

有没有办法让LINQ写代码指示数据库返回最大值?也就是说,有没有办法编写一个LINQ转换成类似于这个T-SQL命令的东西:'从[tbBreadCrumbID]中选择max(BreadCrumbID)其中ProjectID = 49'?这里的结果是一个值,最高的BreadCrumbID。这似乎比接收所有BreadCrumbIDs更快(即使数据库按照您的查询期望进行了排序)。 (PS:我一直在使用相同的策略来获得最大值的结果,仍然在寻找一个产生上述T-SQL的LINQ) – seebiscuit

1

可以使用Max() LINQ扩展方法

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

请注意,如果'tbBreadCrumbs'没有,'Max'将会抛出一个异常对象(行)。 – wdosanjos

1

瓦尔highestId = myEntities.breadcrumbs.lastOrDefault(X => x.ProjectId == 49)

1

试试这个,它会给0如果在专案编号没有面包屑= 49或给予最大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; 
}