Как получить доступ к члену IGrouping? - PullRequest
0 голосов
/ 19 апреля 2011

Две строки ниже возвращают IGrouping<string, DataRow>:

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

Хотелось бы, чтобы вы могли получить доступ к данным группировки, как это mbVals[StringKey], но это не представляется возможным. Я могу сделать foreach над DataRows, но мне просто кажется, что можно легко получить доступ через выражение linq.

То, что я хотел бы сделать, это сравнить поля в датаровых полях из одного с полями из информационных баз данных другого посредством ключей.

Есть мысли?

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

IGrouping<> равно IEnumerable<>, поэтому вы используете метод расширения ElementAt().

Но для ситуации, которую вы описываете, вам может быть лучше использовать Zip() для объединения двух групп (если элементы находятся в одном и том же порядке и точно совпадают) или использовать Join(), если они не совпадают.

0 голосов
/ 19 апреля 2011

Экземпляр, который реализует 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...