我有一个包含学术出版物的数据库,这些出版物都有多个作者。我有一个页面,显示这些出版物的分页部分视图,具有多个筛选选项,旨在同时使用多个筛选器。
我已经能够很好地实现所有其他筛选选项,但给我带来麻烦的是按作者筛选,用户可以键入作者的姓名,它会返回该作者的任何出版物。
这是一个代码优先的数据库,发布模型包含以下内容:
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());
英文:"搜索作者列表中与该出版物作者列表匹配的出版物列表">