我想比较2个系列。其中一个是List<string>
,另一个是List<Book>
。 Book有一个类型为string
的Isbn属性,我想写类似的东西:
List<string> isbnBooks= new List<string> {"978-1933988276", "978-0321146533", "3"};
List<Book> books = new List<Book>();
books.Add(new Book { Isbn="978-1933988276", Name="The Art of Unit Testing"});
books.Add(new Book { Isbn="978-0321146533", Name="TDD By Example"});
books.Add(new Book { Isbn="978-0321503626", Name="Growing Object-Oriented Software"});
// What I want to write
var intersectedBooks = books.Intersect(books, isbnBooks, (book, isbn) => book.Isbn == isbn));
我想在方法中指定相等性。可能吗 ?或者我是否应该强制创建一个实现IEqualityComparer接口的BookComparer?
问候,
弗洛里安
答案 0 :(得分:3)
Intersect
根本不适用于不同的集合类型。在这种情况下,它看起来更简单:
HashSet<string> isbns = new HashSet<string> isbnBooks();
var intersectedBooks = books.Where(book => isbns.Contains(book.Isbn));
或者你可以加入,当然:
var knownBooks = from book in books
join isbn in isbnBooks on book.Isbn equals isbn
select book;
(这两种方法大致相同。)
答案 1 :(得分:2)
或者,你总是这样做:
var intersectedBooks = books.Select(book=>book.Isbn).Intersect(isbnBooks);