繁体   English   中英

如何在C#中过滤包含其他列表的列表?

[英]How do I filter a list containing another list in C#?

我有两个通过一对多关系连接的类:

public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Synopsis { get; set; }
    public IList<Tag> Tags { get; set; }
}

public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
}

如何找到包含给定字符串的所有电影? 只要我不深入标签,我就会管理:

var result = movies.Where(m => m.Title.Contains(searchString) |
                               m.Synopsis.Contains(searchString));

这是一些伪代码,只在我的梦中工作:

var result = movies.Where(m => m.Title.Contains(searchString) |
                               m.Synopsis.Contains(searchString) | 
                               m.Tags.Name.Contains(searchString)); 
                              // Cannot access Name property of Tags like this

做正确的方法是什么?

您无法访问Tag的属性,因为您没有对Tag的引用,而是对标记集合的引用。 因此你需要使用linq的.Any来查询:

确定序列的任何元素是否满足条件。

所以:

var result = movies.Where(m => m.Title.Contains(searchString) |
                               m.Synopsis.Contains(searchString) | 
                               m.Tags.Any(t => t.Name.Contains(searchString)));

还要考虑使用|| 运算符而不是| 运营商 两者都执行逻辑OR但前者会懒惰地执行(即一旦遇到true就停止)。 阅读更多: C#'或'运营商?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM