我有以下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<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>}
尝试声明 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>}
lambda表达式的结果是IQueryable类型。它不允许扩展方法Where,所以首先使用它必须将它转换为例如列表。
你可以这样做
posts = posts.ToList().Where(p => p.PostStatus.Id != 90);