首页 > 解决方案 > 如何使用c#获取foreach循环中每个项目的底层元素?

问题描述

我不确定如何准确地问这个问题,但这是问题所在:

我得到了一个按 SubTypeId(Key = 1 或 Key = 2)过滤的列表,如下所示:

在此处输入图像描述

如您所见,“Key = 1”有 4 个对象:0、1、2 和 3。所有这些对象都具有相同的 TypeDescription。我怎样才能在每个循环中实现这个元素“TypeDescription”一次?

提前致谢!:)

标签: c#.netlistforeachiterator

解决方案


你有几个选择:

  1. 通过两个参数对您的元素数组进行分组:
var res = Reports.GroupBy(u => new {u.SubTypeId, u.TypeDescription})
                     .Select(r => new
                      {
                         r.Key, // Key here consists of two elements
                         items = r.Select(i => new
                         {
                             i.DocumentPath,
                             i.Id,
                             i.Name,
                             i.SubTypeDescription,
                             i.TypeId
                         })
                      }).ToList();

因此,在这种情况下,您将拥有一个集合SubtypeIdTypeDescription分组的项目,其中包含您需要的所有其他元素的集合。

  1. 创建嵌套分组:
var res2 = Reports.GroupBy(u => u.SubTypeId)
                          .Select(r => r.ToList()
                                        .GroupBy(r => r.TypeDescription)
                                        .Select(item=> new {
                                             item.Key,
                                             items = item.Select(i => new 
                                             {
                                                  i.DocumentPath,
                                                  i.Id,
                                                  i.Name,
                                                  i.SubTypeDescription,
                                                  i.TypeId
                                             })
                                         })).ToList();

在这种情况下,您将有更多的嵌套,但数据输出可能更接近您最初请求的内容。


几点建议:

  1. 请尽量避免循环主题内的数组操作,就像在上面的情况下,您在foreach集合输入部分进行了数组分组。相反,在循环之前将数组操作分配给单独的变量。
  2. class尝试使用真实模型,而不是匿名对象。
    注意:在上面的例子中,我使用 Anonymous 对象只是为了演示目的。

推荐阅读