根据当前对象将OrderBy谓词转换为Where谓词

时间:2018-08-16 09:32:32

标签: c# .net linq

我是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;
    }

1 个答案:

答案 0 :(得分:1)

我不完全理解我的意思,但是我认为您希望按传递的顺序发送下一篇文章,所以一种方法是:

  1. 订购文章
  2. 找到当前的人
  3. 返回下一个

这假定存在Id属性:

return Articles
   .Where(where)
   .OrderBy(orderBy)
   .SkipWhile(a => a.Id != current.Id)
   .Skip(1)
   .Take(1);