c# - Entity Framework 对象列表包含对象 lambda 列表

标签 c# entity-framework lambda

以下场景:

public class User{
    public virtual ICollection<MediaItem> MediaItems { get; set; }
}

public enum eMediaItemGenre
{
    [Display(Name = "Pop")]
    POP = 0,
    [Display(Name = "Other")]
    OTHER = 11
}

public class MediaItem
{
    public virtual ICollection<MediaItemGenre> Genres { get; set; }
}

public class MediaItemGenre
{
    [Key]
    public Int32 Id { get; set; }

    public eMediaItemGenre Genre { get; set; }

    public Int32 MediaItemId { get; set; }

    public virtual MediaItem MediaItem { get; set; }
}

现在我想要执行以下操作:我有一个 MediaItem,并且我想找到共享相同 GenreMediaItems

我是这样做的:

List<MediaItem> lItems = ltCOntext.MediaItems.Where(x => x.Genres.Any(y => pGenres.Contains(y))).ToList();

但我收到错误

Only primitive types or enumeration types are supported in this context.

最佳答案

问题是您试图将数据库中的复杂类型与内存中的复杂类型列表进行比较,这是不可能的。我建议做的是使用投影将您的 pGenres 转换为 int 列表:

List<int> pGenresId = pGenres.Select(p => p.Id).ToList();

然后您可以使用您的查询:

List<MediaItem> lItems = ltCOntext.MediaItems
         .Where(x => x.Genres.Select(g => g.Id).Any(y => pGenresId.Contains(y))).ToList();

现在,Linq-to-entities 可以通过将 Idint 放入查询中,将其转换为查询。

关于c# - Entity Framework 对象列表包含对象 lambda 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34827688/

相关文章:

c# - 修剪 DataGridView 单元格中的空白区域

c# - PgAdmin Import/Export 没有使用 Entity Framework 保留外键

c# - string[].Foreach() 中的 T[] 参数

entity-framework - Entity Framework 代码首先使用 Guid 作为身份与另一个身份列

entity-framework - 使用 Postgresql 和 Npgsql 的 Entity Framework

c# - 为什么 Linq 不提供 lambda 参数而不是 IEqualityComparer<T>?

go - 类似于 Go 中的 lambda 表达式(合并类似的方法)

c# - 以编程方式向 WPF 4.5 中的 Grid RowDefition 添加控件

c# - 将空格分隔的数字文件读入数组的快速有效方法?

c# - Entity Framework 核心 : Get a List of All the Tables