J'ai une liste d'objets que j'essaie de lier à la liste de liste. Je trie par deux propriétés. Le problème existe que certains enregistrements peuvent ne pas avoir l'une des propriétés. Cela provoque une erreur. J'aimerais qu'il lie toujours les enregistrements qui ont la propriété.
IEnumerable<ERec> list = retailerList.Cast<ERec>(); lvwRetailStores.DataSource = list.OrderByDescending(r => r.Properties["RS_Partner Type"].ToString()) .ThenBy(r => r.Properties["RS_Title"].ToString());
4 Réponses :
list.Where(r => r.Properties["RS_Partner_Type"] != null && r.Properties["RS_Title"] != null) .OrderByDescending(r => r.Properties["RS_Partner Type"].ToString()) .ThenBy(r => r.Properties["RS_Title"].ToString()); Or instead of != null, use whatever test the Properties collection has.
Vous pouvez utiliser une expression ternaire dans la Lambda:
Je dois noter, une fois que les Lambdas commencent à obtenir ce long, c'est une bonne idée de toute façon de les déclarer comme des fonctions pour nettoyer le code.
Une autre approche commune consiste à donner à la collection une valeur par défaut appropriée et à renvoyer que lorsque la collection n'a pas de clé particulière. Par exemple, si Propriétés code> implémente le cahicotement,
public static class IDictionaryExtension {
public static TValue GetValue<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue default) {
TValue result;
return dict.TryGetValue(key, out result) ? result : dflt;
}
}
...
lvwRetailStores.DataSource = list.OrderByDescending(r => r.GetValue("RS_Partner Type", "").ToString())
.ThenBy(r => r.GetValue("RS_Title","").ToString());
J'ai trouvé que le ?? L'opérateur fonctionne bien. J'utilise des parenthèses pour évaluer pour NULL, P>
Par exemple: P>
Cette même logique fonctionne à Lambda, utilisez simplement des parenthèses pour vous assurer que les comparaisons correctes sont utilisées. P> datetime? Aujourd'hui = DateTimevalue
// Vérifiez NULL, si NULL a mis la date d'aujourd'hui
DateTime Gooddate = aujourd'hui ?? DateTime.now code> p>
Voulez-vous des enregistrements manquant la propriété pour être au début ou à la fin de la liste triée?