2014-01-19 40 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; 
}