2016-11-28 103 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