如何访问IGrouping的成员?

时间:2011-04-18 21:53:39

标签: c# .net linq grouping

以下两行返回IGrouping<string, DataRow>

var mbVals = GetMBValues_MBvsPU(mbRptDataPkg);
var puVals = GetPUValues_MBvsPU(puRptDataPkg);

我想你可以像mbVals[StringKey]一样访问分组的数据,但这看起来不太可能。我可以对DataRows做一个foreach,但在我看来应该能够通过某种方式轻松访问linq表达式。

我想要做的是通过键将数据行中的字段与另一个的数据行中的字段进行比较。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

IGrouping<>IEnumerable<>,因此您使用ElementAt()扩展方法。

但是对于您描述的情况,您可能最好使用Zip()来统一这两个组(如果项目的顺序相同且完全匹配),或者如果他们不参与则使用Join()吨。

答案 1 :(得分:0)

实现IGrouping<T, U>的实例具有类型为T的(一个)键。由于您希望根据键(复数)进行比较,因此IGrouping<string, DataRow>不是您所需要的。

您需要IEnumerable<IGrouping<string, DataRow>>ILookup<string, DataRow>。有很多钥匙的东西。

ILookup<string, DataRow> source1 = GetSource1();
ILookup<string, DataRow> source2 = GetSource2();

var BothKeyed = 
(
 from key in source1.Select(g => g.Key).Union(source2.Select(g => g.Key))
 select new
 {
   Key = key,
   In1 = source1[key],//note, In1 may be empty.
   In2 = source2[key] //note, In2 may be empty.
 }
).ToLookup(x => x.Key);