Так что вы хотите точно один элемент из каждого списка, в котором не был выбран этот пункт уже из предыдущего списка?
Затем выберите из списков, где идентификатор отсутствует в предыдущем выборе. Может быть, что-то вроде этого:
var itemA = listA.First(); // any item is unique, since this is our first one
var itemB = listB.First(b => b.ID != itemA.ID);
var itemC = listC.First(c => c.ID != itemA.ID && c.ID != itemB.ID);
Если количество списков не известно, тогда мы должны были бы сделать это немного более динамичным. Может быть, что-то вроде этого:
var selectedItems = new List<Item>();
foreach (var list in listOfLists)
selectedItems.Add(list.First(x => selectedItems.Count(y => y.ID == x.ID) == 0));
Что это делает петлю через «список списков» (так как количество списков не известно, она должна быть в структуре сбора данных) и получить первый элемент из каждый из которых имеет известные совпадающие идентификаторы. Это должно привести к отображению одного выбранного элемента из каждого списка.
(Все это предполагает, что списки содержат действительный элемент, который вы ищете. Если это не так, то вы можете использовать FirstOrDefault()
вместо и проверить нули.)
использование [Concat] (https://msdn.microsoft.com/en-us/library/bb302894 (v = vs.110) .aspx), затем [Distinct] (HTTPS: //msdn.microsoft.com/en-us/library/vstudio/bb348436(v=vs.100).aspx) – Grundy
Distinct будет работать только в том случае, если он делает сравнение, или ссылки на объекты одинаковы или элементы представляют собой структуру – TheCatWhisperer
@TheCatWhisperer Distinct работает, если объекты сопоставимы - не только одни и те же ссылки или структура или простой obejct. Однако concat + distinct не соответствует его критериям. –