下面两行返回一个IGrouping<string, DataRow>
:
var mbVals = GetMBValues_MBvsPU(mbRptDataPkg);
var puVals = GetPUValues_MBvsPU(puRptDataPkg);
我以为你可以像这样访问分组的数据mbVals[StringKey]
,但这看起来不可能。我可以在datarow上做一个foreach,但在我看来,应该能够通过linq表达式轻松访问。
我想做的是通过键比较一个数据库中的字段和另一个数据库中的字段。
任何想法吗?
谢谢!
IGrouping<>
是IEnumerable<>
,所以你使用ElementAt()
扩展方法。
但是对于您所描述的情况,您可能最好使用Zip()
来统一两组(如果项目的顺序相同并且完全匹配)或使用Join()
,如果它们不是。
实现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);