2012-09-08 40 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的最后一张图片没有下一张。

希望这有助于(应该实际回答问题)。