不能转换的IQueryable <>以IOrderedQueryable错误
-
20-09-2019 - |
题
我有以下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);
不隶属于 StackOverflow