У меня есть две коллекции объектов разного типа.Давайте назовем их типом ALPHA и типом BRAVO .У каждого из этих типов есть свойство, которое является «идентификатором» для объекта.ID не дублируется в классе, поэтому для любого данного идентификатора существует не более одного ALPHA и одного BRAVO экземпляра.Что мне нужно сделать, это разделить их на 3 категории:
- Экземпляры идентификатора в ALPHA , которые не отображаются в коллекции BRAVO ;
- Экземпляры идентификатора в BRAVO , которые не отображаются в коллекции ALPHA ;
- Экземпляры идентификатора, которые отображаются в обеих коллекциях.
Во всех трех случаях мне нужно иметь под рукой реальные объекты из коллекций для последующих манипуляций.
Я знаю, что для случая # 3 я могу сделать что-то вроде:
var myCorrelatedItems = myAlphaItems.Join(myBravoItems, alpha => alpha.Id, beta => beta.Id, (inner, outer) => new
{
alpha = inner,
beta = outer
});
Я также могу написать код для дел # 1 и # 2, который выглядит примерно как
var myUnmatchedAlphas = myAlphaItems.Where(alpha=>!myBravoItems.Any(bravo=>alpha.Id==bravo.Id));
И аналогично для unMatchedBravos.К сожалению, это привело бы к повторению набора альф (который может быть очень большим!) Много раз, а также к сбору браво (который также может быть очень большим!) Также много раз.
Есть ли способ объединить эти концепции запросов, чтобы минимизировать итерации по спискам?Эти коллекции могут содержать тысячи предметов.