Я столкнулся с действительно неприятной ошибкой EF Core (новейшая версия). На данный момент я не уверен, делаю ли я что-то не так или это ошибка. Мы будем признательны за любую помощь, которую может предоставить сообщество.
Ошибка связана с Entity Framework Core и переводом выражения LINQ в SQL. Приведенный ниже код правильно переводится как SQL. Переменная запроса ниже может потенциально иметь множество выражений Where и Includes, применяемых к ней без проблем.
// This works fine
query.Select(price => new Customer {
Name = price.Payer.Name,
Code = price.Payer.Code,
City = price.Payer.City,
ParentCode = price.Payer.ParentCode,
ParentLevel = CustomerLevel.Corporate,
CustomerLevel = CustomerLevel.Payer
}).Distinct().ToListAsync();
Как только я добавлю вызов в OrderBy
, он не будет оценивать. Если я удалю вызов Distinct
, он снова будет работать, но у меня не может быть обоих. Я пробовал несколько разных способов построить выражение и несколько обходных решений, которые я нашел в interwebz, и, похоже, ничего не решает это.
// This throws error
// query is of type IQueryable<Price>
query.Select(price => new Customer {
Name = price.Payer.Name,
Code = price.Payer.Code,
City = price.Payer.City,
ParentCode = price.Payer.ParentCode,
ParentLevel = CustomerLevel.Corporate,
CustomerLevel = CustomerLevel.Payer
}).Distinct().OrderBy(cust => cust.Name).ToListAsync();
Кроме того, размещение OrderBy
не имеет значения. Судя по тому, что я читал, звонок на Distinct
удаляет все предыдущие заказы, так что это неудивительно.
// This also throws error
// query is of type IQueryable<Price>
query
.OrderBy(price => price.payer.Name)
.Select(price => new Customer {
Name = price.Payer.Name,
Code = price.Payer.Code,
City = price.Payer.City,
ParentCode = price.Payer.ParentCode,
ParentLevel = CustomerLevel.Corporate,
CustomerLevel = CustomerLevel.Payer
}).Distinct().ToListAsync();