如何过滤C#中包含另一个列表的列表?
问题描述:
我已经通过一个一对多的关系连接的两个类:如何过滤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)));
还要考虑使用的||
operator代替|
operator。两者都执行合乎逻辑的OR
,但前者会懒散地做到这一点(即,一旦进入true
就停下来)。了解更多:C# 'or' operator?和