WHERE IN (…) Abfragen mit LINQ

Hier ein einfaches Beispiel, welches aus einer Liste von Büchern nur die Bücher von bestimmten Autoren findet:


List<Book> books = new List<Book>();
Book book;

book = new Book()
{
    Author = "Michael Moore",
    Title = "Stupid White Men",
    Price = 9.90M
};
books.Add(book);

book = new Book()
{
    Author = "Christian Nagel",
    Title = "C# 2008",
    Price = 59.99M
};
books.Add(book);

book = new Book()
{
    Author = "Robert C. Martin",
    Title = "Clean Code",
    Price = 19.90M
};
books.Add(book);

List<string> authorsToSearch = new List<string>(){"Michael Moore", "Robert C. Martin"};

books.Where(bookItem => authorsToSearch.Contains(bookItem.Author)).ToList().ForEach(Console.WriteLine);

Als Ausgabe erhält man hier nur die Bücher, deren Autor einem Author der Suchliste entspricht:

Michael Moore: Stupid White Men (9,90)
Robert C. Martin: Clean Code (19,90)

Ich habe in dem Beispiel den Where-Filter als Lambda eingesetzt, alternativ kann man die Suche natürlich auch direkt mit einer LINQ-Abfrage durchführen:


var booksFound = from bookItem in books
                        where authorsToSearch.Contains(bookItem.Author)
                        select bookItem;