2013-04-15 142 views
0

我嘗試執行動態linq group-by查詢。第二個linq語句應該生成與第一個linq語句相同的結果。
任何人都可以告訴我爲什麼第二個linq語句不能工作?Linq group by statement

DataTable dt = new DataTable(); 
dt.Columns.Add("ID"); 
dt.Columns.Add("Name"); 
dt.Columns.Add("ProductName"); 

dt.Rows.Add("1", "aa", "TypeA"); 
dt.Rows.Add("2", "bb", "TypeA"); 
dt.Rows.Add("3", "cc", "TypeB"); 

第一LINQ:

var lotSum = dt.AsEnumerable() 
       .GroupBy(x => new 
          { id = x.Field<string>("id") 
           , product = x.Field<string>("ProductName"), 
          } 
         ).ToList(); 

二LINQ的//着工作?

var gcol = new string[] { "ID", "ProductName" }; 
var gtype = dt.Rows[0].GetType(); 
var lotSum2 = dt.AsEnumerable() 
       .GroupBy(g => string.Join(",", 
      gcol.Select(c => gtype.GetProperty(c).GetValue(g, null)))).ToList(); 
+0

第二個LINQ不同於第一個 - 第二個不投射匿名類型(這就是爲什麼在第一個LINQ中,由2個字段組成的組的原因)。 – code4life

+0

第二個不會引發異常,因爲「ID」和「ProductName」不是DataRow類型的公共屬性? –

回答

0

ID和產品名稱都沒有的DataRow性質,它們是列名。你可以使用索引器... gcol.Select(c => g [c])來訪問它們,假設g是一個DataRow。