2014-03-06 27 views
-2

所以目前,我有一個程序,書籍&作者列表排序。目前,它是由按作者分組的作者輸出的,這意味着它打印作者的姓名&他/她所寫的所有書籍。那麼我試圖扭轉,&它有書,&然後所有作者寫的那本書的輸出。很多幫助將不勝感激。LINQ排序,標題作者

// get authors and titles of each book 
     // they co-authored; group by author 
     var titlesByAuthor = 
      from author in dbcontext.Authors 
      orderby author.LastName, author.FirstName 
      select new 
      { 
       Name = author.FirstName + " " + author.LastName, 
       Titles = 
       from book in author.Titles 
       orderby book.Title1 
       select book.Title1 
      }; 

     outputTextBox.AppendText("\r\n\r\nTitles grouped by author:"); 

     // display titles written by each author, grouped by author 
     foreach (var author in titlesByAuthor) 
     { 
      //display author's name 
      outputTextBox.AppendText("\r\n\t" + author.Name + ":"); 
      // display titles written by that author 
      foreach (var title in author.Titles) 
      { 
       outputTextBox.AppendText("\r\n\t\t" + title); 
      } 
     } 
+0

@DanielMann扭轉的foreach的,但無濟於事。也只是搞亂/試驗和錯誤。這是最後一部分,我卡住了。 – user3238423

回答

0

請使用linq group by operator按書籍分組。下面是一個示例:

public void Linq40() 
{ 
    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 

    var numberGroups = 
     from n in numbers 
     group n by n % 5 into g 
     select new { Remainder = g.Key, Numbers = g }; 

    foreach (var g in numberGroups) 
    { 
     Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", g.Remainder); 
     foreach (var n in g.Numbers) 
     { 
      Console.WriteLine(n); 
     } 
    } 
} 
+0

我很欣賞這個幫助,但是我不認爲這對我有幫助嗎?基本上我需要扭轉我在做的事情,但我很困擾如何首先打印出書,然後是那本書的作者。而不是我現在正在做的事情,先打印作者,然後是後面的書。 – user3238423

0

以下查詢會給你你需要的東西:

var booksByAuthor = 
    from book in dbcontext.Books 
    orderby book.Title1 
    select new 
    { 
     Authors = 
      from a in book.Authors 
      orderby a.LastName, a.FirstName 
      select a.FirstName + " " + a.LastName 
     Titles = book.Title1 
    }; 

你應該能夠自己找出另一部分。

更新

foreach (var book in booksByAuthor) 
{ 
    //display book's title 
    outputTextBox.AppendText("\r\n\t" + book.Title1 + ":"); 

    // display authors of that book 
    foreach (var author in book.Authors) 
    { 
     outputTextBox.AppendText("\r\n\t\t" + author); 
    } 
} 
+0

明白了。謝謝 !! – user3238423