Не удалось перевести запрос linq. Либо перепишите запрос в форме, которая может быть переведена .NETCore - PullRequest
0 голосов
/ 09 мая 2020

У меня есть запрос, как вы можете видеть здесь:

 public Domain.PetrolReceptions.PetrolReception GetLastOpenNotCanceledByVIN(string vin,
            double openPetrolTestTimeInDays)
            => _dbContext.PetrolReceptions.Where(g =>
                g.Car.carBody.vin == vin && g.CreatedDate.AddDays(openPetrolTestTimeInDays) >= DateTime.Today && g.Status != Domain.PetrolReceptions.PetrolReception.PetrolReceptionStatus.Canceled_Passed && g.Status != Domain.PetrolReceptions.PetrolReception.PetrolReceptionStatus.Canceled_Failed && g.Status != Domain.PetrolReceptions.PetrolReception.PetrolReceptionStatus.Canceled_Pending).OrderBy(g => g.CreatedDate).LastOrDefault();

Когда я хочу выполнить этот код, запустив визуализацию, я получаю эту ошибку:

The LINQ expression 'DbSet<PetrolReception>
    .Where(p => p.Car.carBody.vin == __vin_0 && p.CreatedDate.AddDays(__openPetrolTestTimeInDays_1) >= DateTime.Today && (int)p.Status != 5 && (int)p.Status != 4 && (int)p.Status != 3)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

1 Ответ

0 голосов
/ 09 мая 2020

Применить AddDays к параметру, а не к выражению столбца.

Заменить

g.CreatedDate.AddDays(openPetrolTestTimeInDays) >= DateTime.Today 

на

var endDate = DateTime.Today.AddDays(-1 * openPetrolTestTimeInDays);
. . .
g.CreatedDate <= endDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...