我是LINQ的新手,并创建了一个通用函数,该函数将基于当前对象和OrderBy谓词获取下一个对象。我需要将属性排序,并创建一个where属性> currentObject.property。
这可能吗?或者有更好的方法吗?
GetNextArticle(IArticle current, Func<IArticle, bool> where, Func<IArticle, IComparable> orderBy)
{
return Articles.Where(where && x => x.[orderByIComparable] > current.[orderByIComparable]).OrderBy(orderBy)
}
我希望这有意义
解决方案
public IArticle GetNextArticle(IArticle current, Func<IArticle, bool> where, Func<IArticle, IComparable> orderBy)
{
var articles = NewsItems
.Where(where)
.OrderBy(orderBy)
.SkipWhile(a => a.PageId != current.PageId);
return articles.Count() > 1 ? articles.Skip(1).Take(1).First() : null;
}
答案 0 :(得分:1)
我不完全理解我的意思,但是我认为您希望按传递的顺序发送下一篇文章,所以一种方法是:
这假定存在Id
属性:
return Articles
.Where(where)
.OrderBy(orderBy)
.SkipWhile(a => a.Id != current.Id)
.Skip(1)
.Take(1);