2011-04-18 105 views
0

下面的两行返回IGrouping<string, DataRow>如何访问IGrouping的成员?

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

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

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

有什么想法?

谢谢!

回答

0

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

但是对于您所描述的情况,如果统一两个组(如果这些项目的顺序完全相同并且完全匹配)或者使用Join()(如果它们不相同),则最好使用Zip()

+0

感谢您的回复!我尝试过'ElementAt()'但是这是索引和foreaching。我们还没有在.net 4中使用Zip。猜猜我必须走很长的路。 – user259286 2011-04-18 22:01:17

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); 
+0

感谢您的回复!我应该说,分组已经是一个'IQueryable >'这就是'GroupBy'返回的结果。 – user259286 2011-04-19 00:08:41