LINQ совпадение на последнюю дату из 2 столбцов - PullRequest
0 голосов
/ 04 февраля 2019

Дайте этот запрос Linq:

GetData.Where(p => p.LastActionA >= startDate && p.LastActionA <= endDate)

Как я могу изменить его, чтобы я мог сопоставить самое высокое значение из двух столбцов даты?

то есть что-то вроде GetData.Where(MAX(p.LastActionA, p.LastActionB) >= startDate

Ближайший эквивалент SQL, который я могу получить, использует подзапрос, что-то вроде этого:

SELECT ID,
  (SELECT MAX(v)  FROM (VALUES (LastActionA), (LastActionB)) AS value(v)) as MaxDate
FROM Data

1 Ответ

0 голосов
/ 04 февраля 2019

Всего лишь для 2 дат вы можете использовать условный оператор C # (работает как в последней версии EF6, так и в EF Core):

.Where(p => (p.LastActionA > p.LastActionB ? p.LastActionA : p.LastActionB) >= startDate)

Следующее работает для 2 и более дат, но только в EF6 (генерируетхуже SQL).На самом деле это работает и в EF Core, но вызывает оценку клиента, что плохо:

.Where(p => new [] { p.LastActionA, p.LastActionB }.Max() >= startDate)
...