我正在开发一个新闻页面。我可以列出已排序的新闻项目&打印任何新闻记录。在详细信息页面,我还需要显示上一页和下一页的链接,这些链接是我被卡住的地方。
以下是字段:
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;下一个记录正确?我的想法是:
答案 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();
第二个可以与原始查询结合使用