我正在尝试创建一个LINQ查询,以返回movieid的类型。LINQ在LINQPAD4中工作。有人能帮我掌握正确的语法吗?我收到以下错误:
不能隐式地将'System.Linq.IQueryable‘类型转换为'System.Linq.IQueryable’。存在显式转换(是否缺少强制转换?)
和
不能隐式地将类型“System.Collections.Generic.List”转换为“System.Collections.Generic.List”
代码:(注意,我在下面的一行中用括号包装了标题,但实际上是代码中的括号。
公共列表(体裁)GetGenresByMovieId(弦乐电影)
{
MovieCatalog.Titles中的var类型= from t
t.Id == "BVlLx“
选择t.Genres;返回genres.ToList();
}
发布于 2010-10-14 06:13:48
正确的查询将类似于
public IEnumerable<Genre> GetGenresByMovieId(string movieId)
{
return from title in ctx.Titles
from genre in title.Genres
where title.Id == "BVlLx"
select genre;
}在方法调用语法中,您需要使用SelectMany,而不是选择,因为标题的过滤器返回一个标题列表(标题总是包含一个标题,但编译器不知道),因此您希望“连接”结果中每个标题的所有类型。
返回类型实际上是IQueryable,但是如果您只计划对其进行枚举,则可以使用IEnumerable或调用ToList()强制在方法中强制执行(就像我写它的方式--查询只有在尝试枚举它时才会实际执行)。
发布于 2010-10-14 02:34:35
你的问题是你的投射:
select new { Name = g.Name }即将查询投影到匿名类型中。
您需要将项目投影到您声明的IQueryable中(IQueryable<Genre>)
在使用LINQ查询时,最好使用隐式类型变量(var)。
另外,不知道为什么查询中有额外的"from“,您不需要这样做。
像这样的事情应该有效:
var genres = from t in MovieCatalog.Titles
where t.Id = "BVlLx"
select t.Genres;
return genres.ToList();var genres应该输入到IQueryable<Genre>中。
这是假设您想要返回一个类型对象的集合。
如果你只想知道名字,就这样做:
select t.Genres.Name但这将返回字符串对象的集合(应该将var genres键入到IQueryable<string>)。
但是,我对NetFlix OData API一无所知,但这应该会使您走上正确的轨道。
https://stackoverflow.com/questions/3929554
复制相似问题