Выражение Linq завершается неудачно, когда я использую свойство OrderBy. Длина или сочетание включает в себя, OrderBy и AutoMapper ProjectTo <T>Clause - PullRequest
1 голос
/ 28 марта 2019

Приложение Asp.net MVC Core 2.2 аварийно завершает работу, когда выражение LINQ, которое использует комбинацию предложений Include, Orderby и AutoMapper ProjectTo<T>. Ниже приведено исключение, вызванное приложением.

Невозможно привести объект типа «System.Linq.Expressions.PropertyExpression» для ввода 'Remotion.Linq.Clauses.Expressions.QuerySourceReferenceExpression'.

Поведение этого выражения LINQ непредсказуемо, потому что время от времени оно работает, а иногда оно ломается. Я пробовал загружать Eager и Lazy, но все равно получаю ту же ошибку.

recordList = await db.SchoolProfile
                    .Include(i => i.Category)
                    .Include(i => i.District)
                    .Include(i => i.SchoolAddress.Address)
                    .Include(i => i.SchoolAddress.Coordinates)
                    .OrderBy(o => o.Name.Length)
                    .ProjectTo<SchoolProfileViewModel>(mapper.ConfigurationProvider)
                    .ToListAsync();

Та же ошибка выдается даже без Include Предложение:

recordList = await db.CurricularActivity
                    .OrderBy(o => o.Activity.Length)
                    .ProjectTo<CurricularActivityViewModel>(mapper.ConfigurationProvider)
                    .ToListAsync();

Удаление Activity.Length, кажется, работает, но почему он нарушает код, но тот же запрос работает в другом месте?

Поэтому я был бы признателен за некоторые рекомендации по решению этой проблемы.

Я был бы очень признателен, узнав, почему это происходит, и понимая, как решить эту проблему, чтобы я мог писать более эффективные и безошибочные выражения LINQ

1 Ответ

0 голосов
/ 28 марта 2019

Очевидно, что порядок выражения имеет наибольшее значение, у меня это работает без ошибок @Lucian Bargaoanu, спасибо за ссылку на документацию autopper.Всегда начинайте с Проекция , используя ProjectTo<T>, за которым следует LINQ выражение.

recordList = await db.SchoolProfile
                    .ProjectTo<SchoolProfileViewModel>(mapper.ConfigurationProvider)
                    .OrderBy(o => o.SchoolName)
                    .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...