循环通过IEnumerable<;对象>;
本文关键字:对象 gt lt IEnumerable 循环 | 更新日期: 2023-09-27 17:59:42
我使用enumerable和group-by-LINQ对数据表中的5列数据进行分组。现在我需要访问结果中的每一列数据。
编辑:
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
}
属性名称为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/613130和https://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 };
}
我有另一个解决方案来解决这个问题,我试过了,它对我有效;
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();