以下场景:
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
,并且我想找到共享相同 Genre
的 MediaItems
。
我是这样做的:
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 可以通过将 Id
的 int
放入查询中,将其转换为查询。
关于c# - Entity Framework 对象列表包含对象 lambda 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34827688/