MVC 5 C# 搜索多对多关系数据库

MVC 5 C# Search a Many-to-Many Relational Database

我有一个包含学术出版物的数据库,这些出版物都有多个作者。我有一个页面显示这些出版物的分页部分视图,具有多个过滤选项,旨在同时使用多个过滤器。

我已经能够很好地实现所有其他过滤选项,但给我带来麻烦的是作者过滤器,用户可以在其中输入作者姓名,它会 return 该作者的任何出版物。

这是一个代码优先的数据库,发布模型包含:

public virtual ICollection<Author> Authors { get; set; }

同样,在 Author 模型中:

public virtual ICollection<Publication> Publications { get; set; }

现在,我有控制器 return 像这样的局部视图:

Models.Author[] auth = db.Authors.Where(p => p.FullName.ToLower()
    .Contains(searchAuthor).ToLower())).ToArray();

return PartialView("_PublicationList", await db.Publications
    .Where(p => p.Authors.ToList().Contains(auth[0])).ToListAsync());

其中 "searchAuthor" 是视图文本框中的值(为简单起见,我省略了其他过滤器)。

如您所见,这只会搜索匹配的第一作者。如果有人输入 "Michael",并且有多个 Michael 贡献,它只会显示第一个 Michael 的搜索结果。

那么,我应该怎么做呢?我已经搜索 Google 好几天了,但我还没有找到 return 包含多个出版物和多个作者的部分视图的解决方案。有人有解决方案吗?

您需要切换 p.Authors.ToList().Contains(auth[0]) 以便它使用 auth

返回的所有值

像这样的东西应该可以工作:

return PartialView("_PublicationList", await db.Publications
.Where(p => p.Authors.Any(a => auth.Contains(a)).ToListAsync());

英文:"List of publications where the list of that publication's authors has a match in the searchAuthor list"