РЕДАКТИРОВАТЬ: Ядро, чтобы сделать это проще, чтобы изменить сигнатуру ваших методов, чтобы быть универсальным и в типе результата:
public IToCsvService<TSource> Exclude<TResult>(
Expression<Func<TSource, TResult>> expression)
Таким образом, вы не получите выражение преобразования, потому чтоконверсия не понадобится.Например, p => p.Minute
в конечном итоге будет автоматически Expression<Func<DateTime, int>>
из-за логического вывода типа.
Для меня это выглядит излишним, учитывая, что на данный момент все, что вам нужно, это свойство - по крайней мере,это все, что показывает ваш пример.
Почему бы не начать с простого распознавания свойства и расширить его позже , если вам нужно ?
РЕДАКТИРОВАТЬ:полный пример, который не показывает никаких преобразований:
using System;
using System.Linq.Expressions;
class Test
{
static void Main()
{
Expression<Func<DateTime, int>> dt = p => p.Minute;
Console.WriteLine(dt);
}
}
Однако, если вы измените тип выражения на Expression<Func<DateTime, long>>
, он отобразит бит Convert(...)
.Я подозреваю, что вам нужно изменить сигнатуры ваших Exclude
(и т. Д.) Методов.