Sto utilizzando questa funzione di ordine dinamico linq che ho ottenuto da here.Ordine linq dinamico in base alla proprietà annidata con proprietà null
Questo funziona bene con le proprietà nidificate così ho potuto fare questo:
var result = data.OrderBy("SomeProperty.NestedProperty");
Il problema è che se SomeProperty è nullo quindi eseguire l'OrderBy sul NestedProperty tiri il famoso "Oggetto non impostato a un'istanza di un oggetto".
La mia ipotesi è che ho bisogno di personalizzare le seguenti linee per gestire l'eccezione:
expr = Expression.Property(expr, pi);
// Or
LambdaExpression lambda = Expression.Lambda(delegateType, expr, arg);
ho pensato di creare un corpo di dichiarazione in cui ho potuto nel peggiore dei casi utilizzare un tentativo di cattura, ma che didn' funziona come non si può avere corpi di istruzioni all'interno delle istruzioni di linq: "Un'espressione lambda con un corpo di istruzioni non può essere convertita in un albero di espressione"
Mi sono persa qui, qualche suggerimento su come posso realizzare questo ?
A proposito, questo è per Linq to Objects, non relativo al database.
Credo che questa linea 'expr = Expression.Property (espressione, pi);' 'set expr' a null e ulteriore codice non gestirlo. Il modo più semplice per risolverlo è 'expr = Expression.Property (expr, pi) ?? default (T); '. Tuttavia, in questo caso dovrai verificare se stai bene con l'ordine applicato. – Tommi
È un buon punto, in realtà ciò renderebbe errato l'ordinamento, idealmente i valori nulli dovrebbero essere "raggruppati" insieme. –
vedere se questo ti aiuta in qualsiasi modo http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet?lq=1 – Ehsan