Во-первых, это не очень рекомендуется. Когда ваши сущности меняются, либо ваши DTO должны измениться, либо вы должны настроить соответствие между ними. Так что не очевидно, что добавление этого дополнительного уровня сложности даже полезно, не говоря уже о стоимости.
Даже если ваши DTO определяют контракт данных API, используемого другой системой, и вам необходимо поддерживать обратно-совместимые версии этого API по мере развития вашей системы, вам все равно следует реализовать методы API с точки зрения ваших сущностей, и перевести на DTO "на грани". Единственное scneario, где то, что вы предлагаете, имеет смысл, - это если у вас есть OData API, а клиенты создают запросы.
Во-вторых, ничего встроенного не выполнит перевод выражения для вас. Вы должны начать с отображения между вашими сущностями и DTO и использовать его не только при проецировании назад и вперед между экземплярами объекта, но и при переводе выражений запроса.
Похоже, что AutoMapper может помочь, см .:
Using EntityFramework as an example
dataContext.OrderLines.UseAsDataSource().For<OrderLineDTO>().Where(dto => dto.Name.StartsWith("A"))
http://docs.automapper.org/en/stable/Expression-Translation-(UseAsDataSource).html