Я использую эту функцию динамического linq orderby, которую я получил от here.Динамический linq-порядок по вложенному свойству с нулевыми свойствами
Это прекрасно работает с вложенными свойствами, так что я мог бы сделать это:
var result = data.OrderBy("SomeProperty.NestedProperty");
Проблема заключается в том, что если SomeProperty равна нулю, то выполнение OrderBy на NestedProperty бросает позорную «ссылка на объект не указывает на экземпляр объект".
Я думаю, что мне нужно настроить следующие строки для обработки исключения:
expr = Expression.Property(expr, pi);
// Or
LambdaExpression lambda = Expression.Lambda(delegateType, expr, arg);
Я думал о создании тела заявление, где я мог бы в худшем случае использовать в попытке поймать, но это Ждут» t, так как вы не можете иметь тела оператора в порядке выполнения операторов linq: «ЯМР-выражение с телом оператора не может быть преобразовано в дерево выражений»
Я потерян здесь, любые предложения о том, как я могу это сделать ?
Кстати, это для Linq для объектов, а не для базы данных.
Я предполагаю, что эта строка 'выр = Expression.Property (выражение, пи),' 'наборы expr' к нулю и далее код не обрабатывает его. Самый простой способ исправить это: 'expr = Expression.Property (expr, pi) ?? по умолчанию (Т); '. Однако в этом случае вам нужно будет проверить, согласны ли вы с применяемым порядком. – Tommi
Это хороший момент, на самом деле это сделало бы работу сортировки неправильной, в идеале нули должны быть «сгруппированы» вместе. –
Посмотрите, поможет ли это вам каким-либо образом http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet?lq=1 – Ehsan