0

我是 C# 开发的新手,有一些问题。我希望你能帮忙。

我有 2 个与多对多相关的实体——电影和流派。我需要在 datagridView 中显示所有电影,其中 movies.genres 包含在 listBoxGenres 中选择的类型。

我试试这段代码:

moviesDBEntities myContext = new moviesDBEntities();

var myQuery = from movie in myContext.Movies
               where movie.genre.Contains(ListBoxGenres.SelectedItem)
               select movie;


dgvMovies.Datasource = myQuery.ToList();

问题是收到这样的异常错误:

“无法创建 'System.Object' 类型的常量值。在此上下文中仅支持原始类型('例如 Int32、String 和 Guid')。”

谢谢你的帮助

4

2 回答 2

0

使用 的属性ListBoxGenres.SelectedItem,例如:ListBoxGenres.SelectedItem.Value

var myQuery = from movie in myContext.Movies
              where movie.genre.Contains(ListBoxGenres.SelectedItem.Value)
              select movie;
于 2013-03-06T20:28:56.530 回答
0

这里

不支持在查询中引用非标量变量,例如实体。执行此类查询时,将引发 NotSupportedException 异常,并显示一条消息,指出“无法创建 EntityType 类型的常量值。在此上下文中仅支持原始类型('例如 Int32、String 和 Guid')。”

尝试改写您的查询以使用标量变量(这里我假设 Genre 实体具有 Id 的 PK):

var myQuery = from movie in myContext.Movies
          where movie.genre.Any(g=>g.Id == ((Genre)listBox.SelectedItem).Id)
          select movie;
于 2013-03-06T20:29:56.360 回答