2011-06-02 48 views
3

一個Author可以有很多Book。表BookAuthor_Id就可以了。每個家長只選擇1個孩子

我想要一個返回IQueryable<Book>的LINQ查詢(所以我可以用Book.Author.Name和東西導航),但每個作者只有1本書。

我該如何用LINQ做這件事?

回答

4

很肯定這是它:

var books = from a in authors 
      from b in a.Books.Take(1) 
      select b); 

編輯:

var books = authors.Select(author => author.Books.First()) 
        .Select(book => book); 
+0

該解決方案實際上比我的更好,並且生成的SQL更少。 –

+1

@Vince Panuccio這是一種令人驚訝的感覺,使用'Take(1)'感覺相當「拙劣」! – aligray

+1

@VitorReis問題爲每個作者指定一本書,它不會給出任何比這更多的信息,所以我覺得滿足要求。 –

3
var authorsWithFirstBook = 
    from book in Books 
    group book by book.Author into authorBooks 
    select authorBooks.First(); 

這應該會給你第一本小組的書。

然後,你應該能夠做到

foreach (var book in authorsWithFirstBook) { 

    Console.WriteLine(book.Author.FirstName); 
} 
+0

感謝:要做到這一點少哈克方式反應文斯,但正如我所說,我不想與匿名類型工作是否有一種方法,我們可以使用它「書」類型? –

+0

返回'IQueryable '。正如OP所問:)。 –

+0

對不起,我誤解了你的問題 –