Я хочу, чтобы получить все ежемесячные просроченные продукты, вот запрос для этого:Как работать с ошибкой типа времени объекта Entity Framework?
_customerProductsRepository
.Where(
d =>
!d.ReleaseDate.HasValue &&
EntityFunctions.AddMonths(d.RenewalDate ?? d.AcquireDate, 1) < now)
.ToArray();
AcquireDate является первой покупкой продукта и RENEWALDATE является последним обновлением продукта.
По какой-то причине он переводит на этот SQL:
SELECT
[Extent1].[CustomerDidId] AS [CustomerDidId],
[Extent1].[DidNumber] AS [DidNumber],
[Extent1].[CountryId] AS [CountryId],
[Extent1].[CustomerId] AS [CustomerId],
[Extent1].[AcquireDate] AS [AcquireDate],
[Extent1].[ReleaseDate] AS [ReleaseDate],
[Extent1].[RenewalDate] AS [RenewalDate],
[Extent1].[RenewalNotificationDate] AS [RenewalNotificationDate]
FROM [dbo].[CustomerDids] AS [Extent1]
WHERE ([Extent1].[ReleaseDate] IS NULL) AND ((DATEADD (month, 1, [Extent1].[Rene
walDate])) < @p__linq__0)
Там должно быть случай, заявление со ссылкой на «??» вместо этого - это полностью удаленный столбец AcquireDate.
Как я могу обойти это?
Вы настроили свойство 'RenewalDate' по мере необходимости? – Eranga
Вы пытались изменить '??' на '? : 'оператор? – Reniuz
Обратите внимание, что настоящая проблема заключается в том, что нулевой коалесцирующий оператор '??' обрабатывается не так, как вы ожидаете, и переводится в TSQL 'case'. На самом деле это не относится к типу 'DateTime' вообще. См. Мой ответ. –