Добавить значения в список, где отсутствуют данные - PullRequest
2 голосов
/ 03 июня 2019

Я создаю таблицу подсчета количества раз, когда пользователь использовал определенный фильтр.

Для этого я добавляю записи журнала в список, который в настоящее время содержит только зарегистрированные значения.

код, который я использую для этого, показан ниже:

public List<ViewItFilterUseCountModel> KeyIndicatorUseCount()
    {
        var ndtms2Utils = new NDTMS2UtilsEntities();

        var valueQuery = (from keyIndicators in ndtms2Utils.spr_KeyIndicator_Views_Count()
                          select keyIndicators);

        List<ViewItFilterUseCountModel> keyIndicatorUseCountList = new List<ViewItFilterUseCountModel>();

        foreach (var value in valueQuery)
        {
            ViewItFilterUseCountModel model = new ViewItFilterUseCountModel();
            model.LogDate = value.LogDate;
            model.MonthYear = value.MonthYear;
            model.Name = value.KeyIndicator;
            model.Count = value.KeyIndicatorCount;

            keyIndicatorUseCountList.Add(model);
        }

        return keyIndicatorUseCountList;
    }

Мне нужно проверить для каждой комбинации переменных MonthYear и Name, присутствуют ли данные, если для этой комбинации нет записей, мне нужно создать строку в списке с переменной Count, равной нулю.

Как мне это сделать?

1 Ответ

1 голос
/ 03 июня 2019

Добавьте приведенный ниже код внутри метода KeyIndicatorUseCount после заполнения списка keyIndicatorUseCountList данными из БД.Код вставляет пропущенные записи.

var allNames = keyIndicatorUseCountList
    .Select(i => i.Name).Distinct().ToList();

var allMonthYears = keyIndicatorUseCountList
    .Select(i => i.MonthYear).Distinct().ToList();

var allNamesMonthYears = allNames
    .SelectMany(n => allMonthYears, (n, m) => (Name: n, MonthYear: m));

var missingEntries = allNamesMonthYears.
    Except(keyIndicatorUseCountList.Select(i => (i.Name, i.MonthYear)));

foreach (var entry in missingEntries)
{
    ViewItFilterUseCountModel model = new ViewItFilterUseCountModel();
    model.MonthYear = entry.MonthYear;
    model.Name = entry.Name;
    model.Count = 0;
    keyIndicatorUseCountList.Add(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...