我有两个通过一对多关系连接的课程:
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
这样做的正确方法是什么?
答案 0 :(得分:10)
您无法访问Tag
的属性,因为您没有对Tag
的引用,而是对一组标记的引用。因此,您需要使用linq&#39; .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?和