LINQ用于复杂数据分组的查询



我用这种方式有一个复杂的数据

<Complex Data>
      <Data Level 1>..........</Data>  (only single row)
      <Data>...................(n rows)
           <Data 2a>............</Data>  (only single row)
           <Data 2b>............</Data>  (n row)
           <Id></Id>.....................(unique key)
      </Data2>
</Complex Data>

我有一个复杂的数据LIST<COMPLEX DATA>。我需要使用<Data 2a.......eg: Place> </Data2a>

中的元素对这些复杂数据进行分组

我尝试实现这一点,但我只得到子数据类型只有<Data 2a>而不是父数据类型<Data2>

分组后如何将子数据类型转换为父数据类型

如何在for each循环中实现。

如果您需要对复杂的数据进行分组,那么您应该在Linq中使用GroupBy,而不是为每个循环使用for或

在http://msdn.microsoft.com/en-us/vbasic/bb738046上有一些简单的分组示例-第一个示例(在VB中)应该涵盖您需要的内容?

或者,这个关于LinqToXml分组的教程非常好:http://msmvps.com/blogs/martin_honnen/archive/2009/11/27/grouping-with-linq-to-xml.aspx

如果我正确理解你的帖子,你正在寻找这样的东西:

var grouping = source
    .SelectMany(x => x.Items.Select(y => Tuple.Create(x, y))
    .SelectMany(t1 => t1.Item2.Items.Select(z => Tuple.Create(t1.Item1, z))
    .GroupBy(t2 => t2.Item2, t2 => t2.Item1);

如果您想要投影,那么它有点难看,但是以这种方式维护对源元素的引用…

Item1是您的复杂数据,Item2是您当前的投影。嵌套的foreach循环使其更具可读性:

IEnumerable<Tuple<K, TSource>> SelectManyKeys(IEnumerable<TSource> source)
{
    foreach (var x in source)
    {
         foreach (var k in x.Items.SelectMany(z => z.Items))
         {
             yield return Tuple.Create(k, x);
         }
    }
}
var grouping = SelectManyKeys(source).GroupBy(t => t.Item1, t => t.Item2));

相关内容

  • 没有找到相关文章

最新更新