使用linq从列表数据中选择

时间:2013-11-26 16:59:00

标签: c# .net linq

一个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

4 个答案:

答案 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.TagsTag个对象的集合,则应使用Any并传递lambda表达式:

foreach(Book book in books.Where(x=>x.Tags.Any(t => t.Name == filter)))

如果Book.Tagsstring的集合,则应使用Contains方法:

foreach(Book book in books.Where(x=>x.Tags.Contains(filter)))