如何筛选另一个列表MVC LINQ中的列表

时间:2016-11-27 22:25:41

标签: asp.net-mvc linq

我在另一个列表中过滤List属性时遇到问题。 我试图使用Linq。

我有一份文件清单,每一份都有一份作者清单。 我有一个searchString参数,我从视图中得到我希望作者的姓氏相等。我能够使用类文档的其他属性来完成它,但我无法使用列表。

这是我的代码:

public ActionResult Index(string searchBy,string searchString)
{
    db.Documentos.Include(l => l.Pais);
    db.Documentos.Include(l => l.Etiquetas);
    db.Documentos.Include(l => l.Autores);
    var documentos = from m in db.Documentos select m;
    if (searchBy=="Titulo"&& !string.IsNullOrEmpty(searchString))
    {
        documentos = documentos.Where(s => s.Titulo.Contains(searchString));
    }
    if(searchBy =="Fecha" && !string.IsNullOrEmpty(searchString))
    {                
        documentos = documentos.Where(s => s.Fecha.ToString().Contains(searchString));
    }
    if(searchBy == "Autor" && !string.IsNullOrEmpty(searchString))
    {
        documentos = documentos.Where(x => documentos.All(y => y.Autores.All(a => a.Apellido.Contains(searchString))));

    // this doesn't return anything, I cant filter with this.
    }
    return View(documentos.ToList());
}

1 个答案:

答案 0 :(得分:0)

您应该使用Any方法。

documentos = documentos.Where(d => d.Authors.Any(f => f.LastName == searchString));

这将为您提供任何作者姓氏等于搜索字符串的文档列表。如果您没有查找lastname的确切值,而是查找子字符串,则可以使用Contains方法。

documentos = documentos.Where(d => d.Authors
                                    .Any(f => f.LastName.Contains( searchString)));