Новый ответ теперь я заметил, что это Linq to SQL ...:)
Если вы посмотрите на версию Select, которая работает на IQueryable<T>
, это не займет Func<In, Out>
. Вместо этого требуется Expression<Func<In, Out>>
. Компилятор знает, как создать такую вещь из лямбды, поэтому ваш обычный код компилируется.
Таким образом, чтобы иметь множество готовых к использованию функций отображения отображения, передав их в Select, вы можете объявить их следующим образом:
private static readonly Expression<Func<CustomerInfo, string>> GetName = c => c.Name;
private static readonly Expression<Func<CustomerInfo, ClientEntity>> GetEntity = c => new ClientEntity { Name = c.Name, ... };
Затем вы бы использовали их так:
var names = customers.Select(GetName);
var entities = customers.Select(GetEntity);