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



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

我已经能够很好地实现所有其他筛选选项,但给我带来麻烦的是按作者筛选,用户可以键入作者的姓名,它会返回该作者的任何出版物。

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

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

同样,在Author模型中:

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

现在,我让控制器返回部分视图,如下所示:

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的搜索结果。

那么,我该怎么做呢?我在谷歌上搜索了好几天,还没有找到一个返回多个出版物和多个作者的部分视图的解决方案。有人有解决方案吗?

您需要切换p.Authors.ToList().Contains(auth[0]),以便它使用auth返回的所有值

像这样的东西应该起作用:

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

英文:"搜索作者列表中与该出版物作者列表匹配的出版物列表">

最新更新