EF4 Linq 返回类型通用列表
我有一个使用 Entity Framework 4 的 C#-4 MVC3 RC 测试应用程序。
我有这个方法:
public static List<Content> FetchMenu(int websiteID) {
return (from w in ContextHelper.Current.Websites
where w.WebsiteID == websiteID
select w.Contents).ToList();
}
此处涉及的对象(内容和网站)属于 EntityObject 类型。
上面的函数给出编译错误:
Cannot implicitly convert type 'System.Linq.IQueryable<System.Collections.Generic.List<Manager.Models.Content>>' to 'System.Collections.Generic.List<Manager.Models.Content>'. An explicit conversion exists (are you missing a cast?)
w.Contents是一个EntityCollection
类型集合。
如何推迟 Linq.IQueryable 类型以返回内容类型的通用列表?
I have a C#-4 MVC3 RC test-application which is using Entity Framework 4.
I have this method:
public static List<Content> FetchMenu(int websiteID) {
return (from w in ContextHelper.Current.Websites
where w.WebsiteID == websiteID
select w.Contents).ToList();
}
The objects involved here (Content and Website) are of type EntityObject.
The above function gives compilation error:
Cannot implicitly convert type 'System.Linq.IQueryable<System.Collections.Generic.List<Manager.Models.Content>>' to 'System.Collections.Generic.List<Manager.Models.Content>'. An explicit conversion exists (are you missing a cast?)
w.Contents is an EntityCollection<Content>
type collection.
How do I defer the Linq.IQueryable type to return a generic List of type Content?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要使用括号,以便将
ToList()
应用于整个查询(IQueryable
类型的对象):否则您将调用
ToList()< /code> 仅适用于
w.Contents
,然后应用select
。如果我显示方法链接语法可能会更清楚。您的版本:
正确版本:
编辑:
由于
w.Contents
是一个集合,因此您需要使用SelectMany
将其展平:You need to use parentheses, so that you apply
ToList()
to the whole query (an object of typeIQueryable
):Otherwise you are calling
ToList()
onw.Contents
only and theselect
is applied afterwards. It might be clearer if I show the method chaining syntax.Your version:
Correct version:
Edit:
Since
w.Contents
is a collection, you need to flatten it out by usingSelectMany
:.First() 似乎可以解决问题...谢谢。
The .First() seems to do the trick... thanks.
Yakimych 的答案使用
SelectMany()
是正确的。为了完整起见,这里使用“查询理解”语法:Yakimych's answer using
SelectMany()
is corret. For completeness, here it is using "query comprehension" syntax: