我有以下LINQ代码:

    var posts = (from p in db.Posts
         .Include("Site")
         .Include("PostStatus")
        where p.Public == false
        orderby p.PublicationTime 
        select p);

        if (!chkShowIgnored.Checked) {
            posts = posts.Where(p => p.PostStatus.Id != 90);
        }

这最后一行(额外的位置)是给我的错误:

无法隐式转换类型 'System.Linq.IQueryable' 到 'System.Linq.IOrderedQueryable'。

我不知道这是什么意思...点击 为什么会出现这个错误?点击 看来一旦我添加了“排序依据”子句的查询,在这之前它编译罚款,所以我有一种预感的是怎么回事,但我不能完全把我的手指进去。

有帮助吗?

解决方案

尝试声明posts具体为IQueryable<Post>而非var(将拿起IOrderedQueryable<Post>(它仍将的排序)。

可替换地,重新构造它,以便我们为了在端部,使我们能够在中间的where(任选地)使:

var posts = from p in db.Posts
             .Include("Site")
             .Include("PostStatus")
            where p.Public == false
            select p);

if (!chkShowIgnored.Checked) {
    posts = posts.Where(p => p.PostStatus.Id != 90);
}
var finalQuery = posts.OrderBy(p => p.PublicationTime);

(显然,我们看一下finalQuery

它示数的原因是,目前你有(基本上):

IOrderedQueryable<Post> posts = {snip};
...
posts = {something (Where) that returns IQueryable<Post>}

其他提示

型的IQueryable的拉姆达expressionis的结果。它不会允许扩展方法在哪里,所以用它首先你必须将此转换为,例如,一个列表。

您可以用做

posts = posts.ToList().Where(p => p.PostStatus.Id != 90);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top