无法隐式转换 IEnumerable 类型 到 IQueryable
混淆场景:一个人有零只、一只或多只宠物。
使用 Linq to Sql,需要获取给定 personID 的IQueryable
宠物列表。
这是 ERD 中被严重破坏/屠宰/混淆的部分:
代码:
public IQueryable<Pet> GetPersonPets(int personID)
{
var personPets= from p in Person
where p.ID == somePersonID
select p.Pets;
return personPets; //fail
// return (IQueryable<Pet>)personPets //also fail
// return personPets.AsQueryable<Pet>() //also fail
}
引发异常:
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable (System.Data.Linq.EntitySet(Pet))' to 'System.Linq.IQueryable(Pet)'. An explicit conversion exists (are you missing a cast?)
尝试失败:
直接转换不起作用:(IQueryable
调用集合方法 AsQueryable
没有不起作用: .AsQueryable
问题:
如何将 LinqToSql 查询的结果正确转换为 IQueryable
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这对我有用(当然使用不同的表,但关系相同):
虽然我可能会用这种方式的一些变体来编写它:
This works for me (with different tables of course, but same relationship):
Although I'd probably write it in some variation of this way:
尝试这样的事情。
Try something like this.
查看您的查询:
发生的情况是您正在返回
IEntitySet
类型的 IEnumerable(一个元素)(类型:IEnumerable> ;
)。您应该得到一个
IEnumerable
,它会被IQueryable
转换为IQueryable
>
AsQueryable
方法:
Look at your query:
What is happening is that you are returning an IEnumerable (of one element) of
IEntitySet<Pet>
types (the type:IEnumerable<IEntitySet<Pet>>
).You should get an
IEnumerable<Pet>
and it will be converted toIQueryable<Pet>
by theAsQueryable
method:我有以下内容并且效果很好。 我用上面提到的两个表设置了一个简单的数据库,并使用 VS 生成数据类。
在我看来,您的 Person 实际上是 Class 而不是数据库对象(默认情况下由代码生成器命名)。 首先测试上述内容是否适合您,有时调试器可能只是给您一些奇怪的原因,而这些原因实际上并没有指出真正的问题。
I have the following and it works perfectly. Which I setup a simple database with your above mentioned two tables, and generate the dataclass with VS.
It looks like to me, your Person is actually the Class instead of the database object (which is by default named by the code generator). Test if the above works for you first, sometimes the debugger may simply give you some freaky reason which is not actually pointing to the real problem.
,什么对我有用
奇怪的是
what worked for me,
strangely enough