2010-08-12 76 views
0

我有一個需要動態的查詢,我認爲我的大部分語法是正確的,但我不知道如何給它我想分組的列的名稱。我已經嘗試了幾種不同的方法,我總是得到一個錯誤 - 「無屬性或字段‘名稱’存在型‘數據行’如何引用動態linq查詢中的字段?

IQueryable<Result> aggregate1 = 
     query1Data.Tables[0].AsEnumerable().AsQueryable() 
       .GroupBy("name", "it") 
       .Select<Result>("new(Key as Group, Sum(value)as Total)"); 

我想我不得不使用一些像Field<string>("name"),但我不能弄明白我看到的幾個論壇的問題,但似乎沒有人有一個明確的答案如何解決這個問題。

回答

0

這就是你想幹什麼?

var aggregate1 = 
     query1Data.Tables[0].AsEnumerable().AsQueryable() 
      .GroupBy(row => row.Field<string>("name"), row => row.Field<int>("it")) 
      .Select(g => new { Group = g.Key, Total = g.Sum() }); 
0

我不是當然,我確切地知道你想要什麼,但這裏有一小段你可能會用到的代碼靈感:

var dataTable = new DataTable(); 
dataTable.Columns.Add("Name", typeof(String)); 
dataTable.Columns.Add("Value", typeof(Int32)); 
dataTable.Rows.Add("A", 1); 
dataTable.Rows.Add("A", 2); 
dataTable.Rows.Add("B", 3); 
dataTable.Rows.Add("B", 4); 

var aggregate = dataTable.AsEnumerable() 
    .GroupBy(row => row.Field<String>("Name"), row => dataRow.Field<Int32>("Value")) 
    .Select(group => new { Name = group.Key, Total = group.Sum() }); 

foreach (var row in aggregate) 
    Console.WriteLine(row.Name + " = " + row.Total);