linq 如何在EF6中获取包含另一个对象列表的对象列表

cbjzeqam  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(156)

我有两个实体:

  • 书;
  • 流派;

它们具有多对多关系:

public class Book
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Genre> Genres { get; set; }
}

public class Genre
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Book> Books { get; set; }
}

任务是实现按流派搜索。
使用类型ID的列表/数组,查找包含数组中所有类型的所有图书。结果可能包括包含其他类型的图书,但它们必须具有所请求的类型。
使用类似这样的方法:

var genres = _db.Genres.Where(g => genresIdList.Contains(g.Id)).ToList();
var books = _db.Books.Where(b => genres.All(b.Genres.Contains));

导致异常。

zdwk9cvp

zdwk9cvp1#

使用以下查询:

var books = _db.Books.Where(b => b.Genres.Any(g => genresIdList.Contains(g.Id)));
rekjcdws

rekjcdws2#

我的问题的解决方案是:

var genres = _db.Genres.Where(g => genresIdList.Contains(g.Id));
var books = books.Where(b => genres.All(genre => b.Genres.Contains(genre)));

在删除Genre的ToList()并稍微更改LINQ查询后,异常消失了。
感谢每一个试图帮助我们的人:)

相关问题