Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环通过IEnumerable<;对象>;_C#_Linq_Object_Ienumerable - Fatal编程技术网

C# 循环通过IEnumerable<;对象>;

C# 循环通过IEnumerable<;对象>;,c#,linq,object,ienumerable,C#,Linq,Object,Ienumerable,我使用enumerable和GROUPBYLINQ对一个有5列的DataTable中的数据进行分组。现在我需要访问结果中的每一列数据 编辑: private IEnumerable<object> getItemsForDisplay() { var result = toDisplay.AsEnumerable() .GroupBy(x => new {

我使用enumerable和GROUPBYLINQ对一个有5列的DataTable中的数据进行分组。现在我需要访问结果中的每一列数据

编辑:

    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
        }
private IEnumerable getItemsForDisplay()
{
var result=toDisplay.AsEnumerable()
.GroupBy(x=>new
{
Col1=x.Field(“rItem”),
Col2=x.Field(“rMaterial”),
Col3=x.字段(“rSpecs”)
})
.选择(g=>new
{
Col1=g.Key.Col1,
Col2=g.Key.Col2,
Col3=g.Key.Col3,
Col4=String.Join(“,”,g.Select(row=>row.Field(“rQuantity”)),
Col5=String.Join(“,”,g.Select(row=>row.Field(“ropional”)),
}).ToList();
返回结果;
}
//在另一个功能中
foreach(结果中的var项目)
{
//item.tostring显示:{“aaa”、“bbb”、“ccc”、“ddd”、“eee”)
//将其转换为数组字符串或列表以访问“aaa”等
}

属性的名称为
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 };
}
修订后

您不应该传递到其他函数/返回匿名对象(从技术上讲,您可以,但不应该)。请参阅和。如果确实需要,您可以使用
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();
IEnumerable query=result。选择(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();

retrievedItems从何而来?它是否应该是结果?使用
item.Col1
item.Col2
item.Col3
,…创建一个类,而不是使用匿名type@Miroxen更新响应。谢谢。我创建了一个列表字符串列表,为每行填充了一个临时列表,然后将其添加到列表字符串列表中。@huse这绝对不是一个很好的解决方案,我在1,5年前写了这个。我不确定,但是反射调用可能在外部循环