Arhn - архитектура программирования

Запрос LINQ для удаления повторяющихся элементов в списке на основе значения

У меня есть список, содержащий более 600 объектов в этой форме:

Каждый объект имеет свойство ItemCode и свойство ItemCost.

Я пытаюсь написать интегрированный запрос языка С# (LINQ) для

  1. Найдите элементы в этом списке с одинаковым ItemCode.

  2. И удалите тот, у которого выше ItemCost.

Например, если в этом списке 2 элемента с одинаковым ItemCode = RNWA.

Если один из них имеет ItemCost 4,65, а другой имеет ItemCost 3

Я хотел бы удалить тот, у которого выше ItemCost 4,65.

Мой первый подход состоит в том, чтобы найти/выбрать элементы с ItemCodes, встречающимися более одного раза.

Вот несколько моих неудачных попыток (where dataSet is the list of objects)

  1. dataSet.Select(x => x.ItemCode).Where(x => x.Count() > 1).Cast<Dictionary<string, decimal>>();

  2. dataSet.GroupBy(x => x).Where(g => g.Count() > 1).Select(g => g).ToList().Cast<Dictionary<string, decimal>>()

  3. dataSet.GroupBy(x => x.ItemCode).Where(x => x.Count() > 1).Cast<Dictionary<string, decimal>>();

Пожалуйста, может кто-нибудь указать мне в направлении. Благодарю вас!

27.03.2021

  • Словарь не может содержать записи с одним и тем же ключом (ItemCode). 27.03.2021
  • Извините, я неправильно объяснил, на самом деле это список объектов. Я отредактирую свой пост. 27.03.2021

Ответы:


1

С комбинацией GroupBy и .ToDictionary вы можете создать словарь с ItemCode в качестве ключа и самым низким ItemCost в качестве значения.

var result = dataSet
    .GroupBy(i => i.ItemCode)
    .ToDictionary(group => group.Key, group => group.Min(i => i.ItemCost));
27.03.2021
  • Это именно то, чего я пытался достичь, и это сработало. Большое спасибо Фабио! Ценить это! 27.03.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..