Я пытаюсь обмануть массив объектов, используя два столбца, где второй столбец является Словарем. Лучший способ описать это показать код:LINQ и удаление дубликатов из массива объектов
class MyClass
{
public int ID;
public Dictionary<int, int> Dict = new Dictionary<int, int>();
}
И теперь, чтобы создать некоторые объекты:
List<MyClass> list = new List<MyClass>();
MyClass mc1 = new MyClass();
list.Add(mc1); mc1.ID = 1; mc1.Dict.Add(1, 1);
MyClass mc2 = new MyClass();
list.Add(mc2); mc2.ID = 1; mc2.Dict.Add(1, 1);
MyClass mc3 = new MyClass();
list.Add(mc3); mc3.ID = 1; mc3.Dict.Add(1, 2);
MyClass mc4 = new MyClass();
list.Add(mc4); mc4.ID = 2; mc4.Dict.Add(1, 1);
Что я ищу, чтобы выполнить это отличается от ID и Dict. Результаты должны выглядеть следующим образом:
Список объектов MyClass (не симпатичных)
1 //MyClass.ID
1,1 //MyClass.Dictionary
1
1,2
2
1,1
Обратите внимание, что один из объектов был исключен из первоначального списка, потому что это был дубликат ID и Dict (словарные значения) , Я играл с альтернативными версиями:
var s = from p in list
group p by p.ID into group1
from group2 in
(from p in group1 group p by p.Dict)
group group2 by group1.Key;
но просто не повезло. Признайте, что любые люди, которые могут понять, могут решить эту проблему.
PS - Я не изменяю правила, но считаю, что GROUP BY и SELECTFIRST будут чище, чем DISTINCT, с дополнительным кодом для Comparer. Похлопывание по спине для тех, кто может понять это, используя GROUP BY.