Похоже, у вас должен быть словарь типа calc.InnerID
вместо Dictionary<Calc, ...>
. Таким образом, вы можете сделать поиск гораздо быстрее. Вам вообще нужно хранить сам Calc
или вас интересует только идентификатор?
Например:
Dictionary<Guid, List<PropertyValue>> result =
new Dictionary<Guid, List<PropertyValue>>();
while (reader.Read())
{
// Work out calc
List<PropertyValue> list;
if (!result.TryGetValue(calc.InnerID, out list))
{
list = new List<PropertyValue>();
result[calc.InnerID] = list;
}
list.Add(propValue);
}
В качестве альтернативы, если вы можете конвертировать ридер в IEnumerable<Calc>
, вы можете использовать:
Lookup<Guid, PropertyValue> result = items.ToLookup(x => x.InnerID,
// Or however you get it...
x => x.PropertyValue);
РЕДАКТИРОВАТЬ: звучит так, что два значения Calc должны считаться равными, если они имеют одинаковые InnerID
, верно? Поэтому переопределите Equals
и GetHashCode
внутри Calc
, чтобы обратиться к InnerID
. Тогда вы можете просто использовать:
Lookup<Calc, PropertyValue> result = items.ToLookup(x => x,
// Or however you get it...
x => x.PropertyValue);
... или вы можете использовать код как первый фрагмент, но с Dictionary<Calc, ...>
:
Dictionary<Calc, List<PropertyValue>> result =
new Dictionary<Calc, List<PropertyValue>>();
while (reader.Read())
{
// Work out calc
List<PropertyValue> list;
if (!result.TryGetValue(calc, out list))
{
list = new List<PropertyValue>();
result[calc] = list;
}
list.Add(propValue);
}