一个Book
包含Tag
个对象的列表。使用linq
我想选择任何标签名称包含指定过滤器的书籍列表。
string genre; // filter
List<Book> books = repository.GetBooks();
foreach(Book book in books.Where(x=>x.Tags.Any())) //I'm stuck here
答案 0 :(得分:6)
您需要查看是否有任何标签名称等于过滤器:
books.Where(book => book.Tags.Any(tag => tag == genre))
或使用包含方法:
books.Where(book => book.Tags.Contains(genre))
假设Tags
属性返回string
的序列。如果Tag
是用户定义的对象,请使用:
books.Where(book => book.Tags.Any(tag => tag.Name == genre))
答案 1 :(得分:2)
这样的事情应该有效
var results = books.Where(x => x.Tags.Any(t => t.Name == genre))
或者这个:
var results = books.Where(x => x.Tags.Select(t => t.Name).Contains(genre))
答案 2 :(得分:1)
尝试以下
foreach(Book book in books.Where(x=>x.Tags.Any(t => t.Name == "tag-name")))
答案 3 :(得分:1)
如果Book.Tags
是Tag
个对象的集合,则应使用Any
并传递lambda表达式:
foreach(Book book in books.Where(x=>x.Tags.Any(t => t.Name == filter)))
如果Book.Tags
是string
的集合,则应使用Contains
方法:
foreach(Book book in books.Where(x=>x.Tags.Contains(filter)))