0

我想比较 2 个集合。其中一个是 a List<string>,另一个是 a List<Book>。Book 有一个 Isbn 类型的属性string,我想写这样的东西:

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 吗?

问候,

弗洛里安

4

2 回答 2

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;

(这两种方法大体上是等价的。)

于 2012-07-02T12:41:07.300 回答
2

或者,你总是可以这样做:

var intersectedBooks = books.Select(book=>book.Isbn).Intersect(isbnBooks);
于 2012-07-02T12:44:28.293 回答