Похоже, что вы пропускаете знак равенства где-то при фильтрации в поле order_id
. Вы, вероятно, имеете:
oh.order_id = 20119 && ...
В то время как вы должны иметь:
oh.order_id == 20119 && ...
Обратите внимание на оператор равенства и оператор присваивания. Результатом оператора присваивания является присвоенное значение, поэтому ваша ошибка говорит о том, что вы не можете сравнивать операнды int и System.DateTime.
Я также предполагаю, что у вас есть такая же проблема при проверке со значением date_inserted
.
По второй части вашего вопроса вы близки в преобразовании коррелированного подзапроса.
В SQL у вас есть:
oh.date_inserted = (
select max(date_inserted) from order_history where order_id = oh.order_id
group by order_id)
А в LINQ-to-SQL у вас есть
ch.date_inserted == (cdo.order_histories.Max(p => p.date_inserted))
Вам просто нужно добавить фильтр для order_histories
, который использует замыкания для захвата значения order_id
в экземпляре ch
следующим образом:
ch.date_inserted == (cdo.order_histories.
Where(ch2 => ch2.order_id == ch.order_id).
Max(p => p.date_inserted))