Вы можете добавить второй выбор, в котором вы проверяете, есть ли в таблице поиска записи, и если нет, создайте новую таблицу поиска.Это отличается от предложенного решения объединения, так как не добавляет значения по умолчанию, ЕСЛИ есть другие значения.
см .:
IDictionary<TKey, Summary<TKey>> Summarize<TKey, TValue>(IEnumerable<TValue> values)
{
return values
.ToLookup(val => GetKey(val)) // group values by key
.Select(x => x.Any() ? x : Enumerable.Repeat(default(TKey), 1).ToLookup(x => GetKey(x)))
.ToDictionary(
group => group.Key,
group => CreateSummary(group)); // summarize each group
}
Если вы хотите решение с объединением,вы можете использовать ту же логику для создания таблицы поиска по умолчанию, например:
IDictionary<TKey, Summary<TKey>> Summarize<TKey, TValue>(IEnumerable<TValue> values)
{
return values
.ToLookup(val => GetKey(val)) // group values by key
.Union(Enumerable.Repeat(default(TKey), 1).ToLookup(x => GetKey(x)))
.ToDictionary(
group => group.Key,
group => CreateSummary(group)); // summarize each group
}
Надеюсь, это поможет