如何使用DateTime字段检索上一个和下一个记录?

时间:2014-10-21 12:37:46

标签: c# lambda

我正在开发一个新闻页面。我可以列出已排序的新闻项目&打印任何新闻记录。在详细信息页面,我还需要显示上一页和下一页的链接,这些链接是我被卡住的地方。

以下是字段:

Guid news.Id
DateTime news.CreateTime
DateTime news.StartDate
DateTime news.EndDate
Int news.Priority

CreateTime 包括date&时间信息即; CreateTime =" 2014-10-21T11:35:18.1732578 + 03:00" StartDate 仅包含日期信息,即; 的StartDate =" 2014-10-21T00:00:00" 所以可能有很多具有相同StartDate的记录。简而言之; CreateTime是唯一字段,StartDate不是。

下面是排序& amp;的lambda表达式。正确加载记录:

var newsAll = Data.Get<News>()
  .OrderBy(n => n.Priority)
  .ThenByDescending(n => n.StartDate)
  .ThenByDescending(h => n.CreateTime)
  .ToList()

以下是我如何回复新闻记录:

 string strCurrentNewsTime = "20141019140523"; // from the URL

 var newsItem = Data.Get<News>()
     .Where(n => n.CreateTime.ToString("yyyyMMddHHmmss") == strCurrentNewsTime)
     .First();

还没问题!现在我需要找到以前的&amp;下一个记录。我失败的代码是:

// Previous record
var prevNews = Data.Get<News>()
    .Where(n => n.StartDate <= newsItem.StartDate && n.Id != newsItem.Id)
    .OrderByDescending(n => n.Priority)
    .ThenByDescending(n => n.StartDate)
    .ThenBy(h => h.CreateTime)
    .First();

string prevNewsTime = prevNews.CreateTime.ToString("yyyyMMddHHmmss"); // to URL

我怎样才能获得之前的&amp;下一个记录正确?我的想法是:

  • 排序&amp;获取具有给定日期的所有项目
  • 迭代项目,直到找到当前记录Id
  • 抓住上一条和下一条记录&#39;
  • 打破循环

1 个答案:

答案 0 :(得分:1)

var prefItem = Data.Get<News>()
    .Where(n => n.CreateTime.ToString("yyyyMMddHHmmss") < strCurrentNewsTime) //
    .OrderBy... // sort in the opposite order
    .First();

var nextItem = Data.Get<News>()
    .Where(n => n.CreateTime.ToString("yyyyMMddHHmmss") >= strCurrentNewsTime) //
    .Drop(1)
    .FirstOrDefault();

第二个可以与原始查询结合使用