无法隐式转换类型'System.Linq.IQueryable<> '为'System.Linq.IOrderedQueryable<>'。

10

可能重复:
LINQ2SQL:无法将IQueryable<>转换为IOrderedQueryable错误

我在我的控制器的searchString中遇到了这个错误。

下面是我的代码:

if (!String.IsNullOrEmpty(searchString))
{ 
    posts = posts.Where(post => post.Body == searchString);
}

我在我的索引中使用这些代码进行搜索。这里有什么声明错误或其他问题吗?我已经尝试过谷歌搜索,但没有找到清晰的答案。提前感谢任何能帮助我的人。


什么是post,你如何声明/使用它? - V4Vendetta
1
这个线程看起来很相似:https://dev59.com/a3I-5IYBdhLWcg3wq6do。posts是什么数据类型?它来自哪里?你是否在任何地方对其进行排序(orderby)? - JLRishe
3个回答

25

最可能的原因是您在具有 OrderBy 的查询中使用了隐式的 var 声明来声明 posts。如果您用下面的代码替换它:

IQueryable<Post> posts = someSource.Where(cond).OrderBy(/*the culprit*/);

错误应该消失。


哇..是的,你说得对,伙计..你的答案完美地解决了我的问题。它起作用了..谢谢 :).. !! - bot

6

你的 posts 变量似乎是 IOrderedQueryable<Post> 类型,但你将其赋值为 IQueryable<Post>。解决此问题的两种方法:要么将变量类型修改为 IQueryable<Post>,要么按如下方式对查询进行排序:

posts = posts.Where(post => post.Body == searchString)
    .OrderBy(post => post.Date);

0

postsIOrderedQueryable,而 where 方法的调用返回了一个 IQueryable。为什么不明确声明变量并查看是否可以解决问题呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接