实体框架Datagridview过滤器

本文关键字:过滤器 Datagridview 框架 实体 | 更新日期: 2023-09-27 18:02:32

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

我有两个实体相关的多对多-电影和类型。我需要在一个datagridView中显示所有的电影。types包含在listboxstyles中选择的类型。

我试试这个代码:

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)。"

谢谢你的帮助

实体框架Datagridview过滤器

见这里

在查询中引用非标量变量(如实体)是不受支持的。当这样的查询执行时,一个NotSupportedException抛出异常,并提示"无法创建EntityType类型的常数值。只有基本类型(例如在此上下文中支持Int32, String和Guid')。"

尝试重新措辞你的查询使用标量变量(这里我假设类型实体有PK的Id):

var myQuery = from movie in myContext.Movies
          where movie.genre.Any(g=>g.Id == ((Genre)listBox.SelectedItem).Id)
          select movie;

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

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