Почему это работает в одном случае, а не в сумматоре?
blockquote>Поскольку EF действительно не знает о вашем методе
Filter
. Он не понимает, что он должен делать, поэтому он не знает, как перевести его в SQL. Сравните это сWhere
и т. Д., Которые он понимает .Версия, в которой вы ее называете непосредственно , работает, потому что таким образом вы не заканчивается деревом выражений, содержащим вызов
Filter
- он просто вызываетFilter
напрямую, что, в свою очередь, делает , создает запрос ... но тот, который понимает EF.Я был бы очень удивлен, если бы вы могли решить, как заставить ваш метод
Filter
работать в EF-запросе ... но вы уже сказали, что использованиеWhere
все равно работает, поэтому зачем вообще использоватьFilter
? Я бы использовал версиюWhere
- или еще лучше, используйте перегрузкуAny
, которая берет предикат:context.Table.Filter(e => e.SubTable.Any(et => et.ID < 500) && e.ID < 500);
Dozer создаст EmpDto, если вы вызовете метод map, передав класс EmpDto в качестве второго аргумента. Он возвращает экземпляр EmpDto, который легко смоделировать
@GetMapping("/{id}")
public EmpDto getEmployeeById(@PathVariable long id){
EmpModel empModel = service.getEmployeeById(id);
return dozerBeanMapper.map(empModel,EmpDto.class);
}