无法将IQueryable 转换为IOrderedQueryable错误

我有以下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’。

我不确定这意味着什么……
为什么我收到此错误?
它出现了一次我在查询中添加了“orderby”子句,之前它编译得很好,所以我对所发生的事情有一种预感,但我无法完全理解它。

尝试将posts专门声明为IQueryable而不是var (它将获取IOrderedQueryable (它仍将订购)。

或者,重新组织它,以便我们在最后订购,允许我们(可选)引入中间的位置:

 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 posts = {snip}; ... posts = {something (Where) that returns IQueryable} 

lambda表达式的结果是IQueryable类型。 它不允许扩展方法Where,所以首先使用它必须将它转换为例如列表。

你可以这样做

 posts = posts.ToList().Where(p => p.PostStatus.Id != 90);