2012-07-02 3 views
0

2 개의 모음을 비교하고 싶습니다. 이 중 하나는 List<string>이고 다른 하나는 List<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를 작성해야합니까?

감사합니다,

플로리안

답변

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

은 또는, 당신은 항상 할 수있는 :

var intersectedBooks = books.Select(book=>book.Isbn).Intersect(isbnBooks); 
+0

예 그러나 IEnumerable을 반환하고 나는을 Enumerable에서 원하는. 답변 주셔서 감사합니다 ! – Florian