2016-11-28 80 views
0

組數據表的結果,我有以下的DataTable如何使用LINQ查詢表達式

DataTable BookTable = new DataTable(); 
//Add columns in Book Table 
BookTable.Columns.Add("BookCategory", typeof(string)); 
BookTable.Columns.Add("BookName", typeof(string)); 
//Add rows in Book Table 
BookTable.Rows.Add("Programming", "C# basics"); 
BookTable.Rows.Add("Programming", "Java basics"); 
BookTable.Rows.Add("Networking", "Networking Basics"); 
BookTable.Rows.Add("Database", "Intro to Database"); 

我想篩選出書類別列的基礎這對圖書名字,我寫了下面的Lambda表達式

var BooksList = from Book in BookTable.AsEnumerable() 
       group Book by Book.Field<string>("BookCategory") into g 
       let list = g.ToList() 
       select new 
       { 
        BookCategory = g.Key, 

        BookNames = list.Select(x => x.Field<string>("BookName").ToString())     }; 

現在我必須按以下格式打印出來;

  1. 編程
    • C#基礎
    • Java基礎
  2. 網絡
    • 網絡基礎
  3. 數據庫
    • 簡介數據庫

我想知道我怎麼可以從下面的代碼書分類買到這本書的名稱;

foreach(var Book in BooksList) 
{ 
    Console.WriteLine(Book.BookCategory); 
    //logic to Obtain Book Names Here ; 
} 
+0

嗯...'Book.BookNames'?! –

+0

它正在返回: '{System.Linq.Enumerable.WhereSelectListIterator }'Not Book Names in String in String。 – Asif

+0

在你顯示的代碼中你沒有註釋'.Where',那麼爲什麼你會得到一個'WhereSelectListIterator'?這不是真正的代碼嗎?此外,你有什麼代碼試過,是什麼導致這個異常(這是一個例外?)? –

回答

0

你需要在你的代碼中插入的string.join:

var BooksList = from Book in BookTable.AsEnumerable() 
         group Book by Book.Field<string>("BookCategory") into g 
         let list = g.ToList() 
         select new 
         { 
          BookCategory = g.Key, 

          BookNames = string.Join(" ; ",list.Select(x => x.Field<string>("BookName").ToString())) 
         }; 
+0

感謝您的幫助。 – Asif