2011-04-18 102 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