0

2 つのコレクションを比較したい。これらのうちの 1 つは で、もう 1 つはList<string>ですList<Book>。Book には type の 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;

(2 つのアプローチはおおむね同等です。)

于 2012-07-02T12:41:07.300 に答える
2

または、いつでも次のことができます。

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