У меня есть класс Items
с properties (Id, Name, Code, Price)
.
Список Items
заполнен дублирующимися элементами.
Например:
1 Item1 IT00001 $100
2 Item2 IT00002 $200
3 Item3 IT00003 $150
1 Item1 IT00001 $100
3 Item3 IT00003 $150
Как удалить дубликаты в списке с помощью linq?
c#
linq
linq-to-objects
generic-list
Прасад
источник
источник
var set = new HashSet<int>(); var uniques = items.Where(x => set.Add(x.Id));
. Это должно быть преступно ..Ответы:
Чтобы сопоставить только некоторые свойства, создайте пользовательский компаратор равенства, например:
Тогда используйте это так:
источник
GroupBy
не смог.XoR
оператор^
в C #. Использовал в VB.NET через,Xor
но должен был сделать двойной код для вашего кода, чтобы увидеть, что это было на первых порах.1[DataAccess.HR.Dao.CCS_LOCATION_TBL] Distinct[CCS_LOCATION_TBL](System.Linq.IQueryable
1 [DataAccess.HR.Dao.CCS_LOCATION_TBL], System.Collections.Generic.IEqualityComparer`1 [ DataAccess.HR.Dao.CCS_LOCATION_TBL]) ', и этот метод не может быть преобразован в выражение хранилища.источник
Если есть что-то, что отбрасывает ваш запрос Distinct, вы можете взглянуть на MoreLinq, использовать оператор DistinctBy и выбрать отдельные объекты по id.
источник
Так я смог сгруппироваться с Linq. Надеюсь, поможет.
источник
FirstOrDefault
здесь не дает никакой пользы, еслиSelect
сразу следуетGroupBy
, поскольку нет никакой возможности создать пустую группу (группы были просто получены из содержимого коллекции)Используйте,
Distinct()
но имейте в виду, что он использует компаратор по умолчанию для сравнения значений, поэтому, если вы хотите чего-то большего, вам нужно реализовать свой собственный компаратор.Пожалуйста, посмотрите http://msdn.microsoft.com/en-us/library/bb348436.aspx для примера.
источник
У вас есть три варианта удаления дубликата из списка:
Distinct(new DistinctItemComparer())
как упомянутое @Christian Hayter .Используйте
GroupBy
, но, пожалуйста, обратите внимание, чтоGroupBy
вы должны группировать по всем столбцам, потому что если вы просто группируете поId
ним, не всегда удаляйте дублирующиеся элементы. Например, рассмотрим следующий пример:Результат для этой группировки будет:
Что неверно, потому что он считает
{Id = 3, Name = "Item3", Code = "IT00004", Price = 250}
дубликатом. Таким образом, правильный запрос будет:3. Переопределить
Equal
иGetHashCode
в классе элемента:Тогда вы можете использовать это так:
источник
Универсальный метод расширения:
Пример использования:
источник
Попробуйте этот метод расширения. Надеюсь, это может помочь.
Использование:
источник
источник
Еще один обходной путь, не красивый купить работоспособным.
У меня есть XML-файл с элементом «MEMDES» с двумя атрибутами «GRADE» и «SPD» для записи информации модуля RAM. В СДПГ много дублирующих предметов.
Итак, вот код, который я использую для удаления дублированных элементов:
источник
Если вы не хотите писать IEqualityComparer, вы можете попробовать что-то вроде следующего.
источник