2012-09-08 35 views
0

我獲得最大的IDlinq上一個下一個?

db.info_dbs.Max(u => u.id); 

我怎樣才能獲得以前的ID和(一張ID(後前面))

+2

next before previous = current? 以及「前一個」和「之後的下一個」是什麼意思?你的意思是「前三名」 - 即Max,下一個更小,另一個?或者集合中每個記錄的下一個和前一個ID? – aiodintsov

+0

使用OrderBy,Skip和First/FirstOrDefault。 –

+0

訪問此問題http://stackoverflow.com/questions/1811846/how-to-get-the-second-highest-number-in-an-array-in-visual-c –

回答

1

這是Id字段標識列?以前是Max(Id)-1,下一個Id將是Max(id)+1。

但是,使用這種身份列將是一個壞主意,因爲您可以在數據庫中運行多個事務同時也不能保證您計算出的下一個/以前的值在你稍後使用它們的時候是正確的。

如果您需要其他東西,請告訴我。

2

這樣可以通過Id降序來命令收集,跳過第一個,然後抓取收集中的下一個。那是你在找什麼?

var collection = new[] 
         { 
          new { Id = 1 }, 
          new { Id = 3 }, 
          new { Id = 2 }, 
          new { Id = 5 } 
         }; 

var secondHighestIdValue = collection.OrderByDescending(x => x.Id).Skip(1).First(); 

Console.WriteLine(secondHighestIdValue); // { Id = 3 } 
0

給出一個ID(在我的情況下,圖片),在這裏如何獲得下一個圖片ID和以前的圖片ID。我使用這2個輔助方法:

public int GetPreviousPictureId(int id) 
{ 
    var picture = db.Pictures.Where(x => x.Id < id).OrderByDescending(x => x.Id).FirstOrDefault(); 

    if (picture != null) 
     return picture.Id; 

    return 0; 
} 

public int GetNextPictureId(int id) 
{ 
    var picture = db.Pictures.Where(x => x.Id > id).OrderBy(x => x.Id).FirstOrDefault(); 

    if (picture != null) 
     return picture.Id; 

    return 0; 
} 

爲了得到以前,我採取只有那些具有下位ID篩選圖片,降序排列按ID,這樣的第一要素列表(FirstOrDefault)是我需要的。

要得到下一個,我會做相反的事情。我過濾的圖片只通過更高的ID,順序升序ID,以便列表的第一個元素是我需要的。

正如你所看到的我檢查空並返回id如果不爲空。 如果沒有找到圖片,返回0。如果找不到,某些開發人員更喜歡返回-1。由你決定。

DB的第一張圖片沒有以前的圖片。 DB的最後一張圖片沒有下一張。

希望這有助於(應該實際回答問題)。