Il semble que vous devriez avoir un? dictionnaire du type de calc.InnerID
, au lieu d'un Dictionary<Calc, ...>
. de cette façon, vous pouvez faire la recherche beaucoup plus rapidement. Est-ce que vous avez réellement besoin de stocker le Calc
lui-même du tout, ou êtes-vous seulement intéressé par l'ID?
Par exemple :
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);
}
Alternativement, si vous pouvez convertir le lecteur à un IEnumerable<Calc>
vous pouvez utiliser:
Lookup<Guid, PropertyValue> result = items.ToLookup(x => x.InnerID,
// Or however you get it...
x => x.PropertyValue);
EDIT: Il semble que deux valeurs Calc doivent être considérées comme égales si elles ont le même InnerID
, non? Remplacez donc Equals
et GetHashCode
par Calc
pour faire référence au InnerID
. Ensuite, vous pouvez simplement utiliser:
Lookup<Calc, PropertyValue> result = items.ToLookup(x => x,
// Or however you get it...
x => x.PropertyValue);
... ou vous pouvez utiliser le code comme le premier extrait, mais avec un 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);
}
Mettre le lecteur = comparation nulle en dehors de la clause while. Maintenant, vous vérifiez à environ 60000 ... quand vous pourriez le vérifier une fois. – Jonathan
Oui, je le répare, c'est une erreur :). Merci! –