我正在处理一个函数,该函数根据传入的电影名称返回一个电影对象。
我是linq2entities的新手,我不知道如何解决我得到的编译器错误。
public Film GetFilm(string FilmName)
{
Film temp = FilmEntity.Films.Where(f => f.FilmTitle == FilmName);
return temp;
}
在这段代码中感觉f没有被定义,但我不知道是否是这种情况。
答案 0 :(得分:3)
问题在于哪里不返回Film
而是返回IQueryable<Film>
你应该做的就是这个
public Film GetFilm(string FilmName)
{
Film temp = FilmEntity.Films.Where(f => f.FilmTitle == FilmName).Single();
return temp;
}
或者
public Film GetFilm(string FilmName)
{
Film temp = FilmEntity.Films.Single(f => f.FilmTitle == FilmName);
return temp;
}
这一切都假设你在db中只有一个这个名字。如果可能有更多,你可以使用First或FirstOrDefault(如果它没有找到任何东西,这个将不会返回异常)。 Single也是如此。如果可能有ONE或NONE
,您也可以使用SingleOrDefault答案 1 :(得分:0)
在哪里返回一个可以用于电影的IQueryable,但是你将它分配给一个电影。
如果您只期望一个结果,那么有比您可以使用的方法更好的方法。我常用的是
假设FilmTitle是唯一的,你可以安全地使用Single(),如果不是那么你需要考虑如果有多个具有相同标题会发生什么。
public Film GetFilm(string FilmName)
{
Film temp = FilmEntity.Films.Single(f => f.FilmTitle == FilmName);
return temp;
}
另一种选择(如果你期待多部电影)可能是
public IEnumerable<Film> FindFilms(string searchString)
{
return FilmEntity.Films.Where(f => f.FilmTitle.Contains(searchString));
}