2015-06-24 52 views
-2

我使用enumerable和LINQ組來分組來自DataTable的5列數據。現在我需要訪問結果中的每一列數據。通過IEnumerable循環<object>

編輯:

private IEnumerable<object> getItemsForDisplay() 
    { 
      var result = toDisplay.AsEnumerable() 
      .GroupBy(x => new 
      { 
       Col1 = x.Field<string>("rItem"), 
       Col2 = x.Field<string>("rMaterial"), 
       Col3 = x.Field<string>("rSpecs") 
      }) 
      .Select(g => new 
      { 
       Col1 = g.Key.Col1, 
       Col2 = g.Key.Col2, 
       Col3 = g.Key.Col3, 
       Col4 = String.Join(", ", g.Select(row => row.Field<string>("rQuantity"))), 
       Col5 = String.Join(", ", g.Select(row => row.Field<string>("rOptional"))), 
      }).ToList(); 
     return result; 
    } 

     //In another function 
     foreach (var item in result) 
     { 
      //item.tostring shows this: {"aaa","bbb","ccc","ddd","eee") 
      //turn it to array string or list to access "aaa".. etc etc 
     } 
+4

retrieveItems從哪裏來?它不應該是結果嗎? – Andrew

+0

使用'item.Col1','item.Col2','item.Col3',... – xanatos

+0

創建一個類而不是使用匿名類型 –

回答

3

屬性的名稱是Col1 ... Col5

foreach (var item in result) 
{ 
    Console.WriteLine(item.Col1); 
    Console.WriteLine(item.Col2); 
    Console.WriteLine(item.Col3); 
    Console.WriteLine(item.Col4); 
    Console.WriteLine(item.Col5); 

    // If you want an array: 
    var arr = new string[] { item.Col1, item.Col2, item.Col3, item.Col4, item.Col5 }; 
} 

修訂後的

你不應該傳遞給其他函數/返回匿名對象(技術上你可以,但你不應該)。見https://stackoverflow.com/a/6625008/613130https://stackoverflow.com/a/18189923/613130。如果你真的想要,你可以使用dynamic

foreach (dynamic item in result) 
{ 
    Console.WriteLine(item.Col1); 
    Console.WriteLine(item.Col2); 
    Console.WriteLine(item.Col3); 
    Console.WriteLine(item.Col4); 
    Console.WriteLine(item.Col5); 

    // If you want an array: 
    var arr = new string[] { item.Col1, item.Col2, item.Col3, item.Col4, item.Col5 }; 
} 
+0

請參閱編輯的代碼。感謝您的時間 – Miroxen

+0

@Miroxen更新回覆。 – xanatos

+0

謝謝。我創建了一個列表字符串列表,爲每行填充一個臨時列表,然後將它添加到列表字符串列表中。 – Miroxen

0

我對這個問題有另一個解決方案,我試過了,它對我有用。我用反射如下;

IEnumerable<object> query = result.Select(x => new { 
    Col1 = x.GetType().GetProperty("Col1").GetValue(x, null).ToString() ?? "", 
    Col2 = x.GetType().GetProperty("Col2").GetValue(x, null).ToString() ?? "", 
    Col3 = x.GetType().GetProperty("Col3").GetValue(x, null).ToString() ?? "", 
    Col4 = x.GetType().GetProperty("Col4").GetValue(x, null).ToString() ?? "", 
    Col5 = x.GetType().GetProperty("Col5").GetValue(x, null).ToString() ?? "", 
}).ToList(); 
+0

循環中反射調用太多? – huseyint

+0

@huseyint這絕對不是很好的解決方案,我在1,5年前寫了這篇文章。我不確定,但反射電話可能在外面循環 –