public DateTime DateTime1 { get; set}
q.Where(x => SqlFunctions.DatePart("yyyy", x.DateTime1) == 2014);
Этот код хорошо преобразовывается в SQL
Но мне нужно построить такое
x => SqlFunctions.DatePart("yyyy", x.DateTime1) == 2014 через Expression
memberExpression = x.DateTime1
public static Int32? DatePart(String datePartArg, DateTime? date)
var sqlFunctions = typeof(SqlFunctions).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(x => x.Name == "DatePart").FirstOrDefault(x => x.GetParameters().Count() == 2 && x.GetParameters()[1].ParameterType == typeof(Nullable<DateTime>));
//1 - не рабочий код
//т.к. DatePart принимает Nullable<DateTime>
Expression exprY = Expression.Call(sqlFunctions, Expression.Constant("yyyy"), memberExpression);
//2 - не рабочий код
//т.к. Expression будет типа {DatePart("yyyy", Convert(x.DateTime1))} и не сможет потом привести его в SQL
Expression exprY = Expression.Call(sqlFunctions, Expression.Constant("yyyy"), Expression.Convert(memberExpression, typeof(Nullable<DateTime>)));
Как привести DateTime1 к Nullable<DateTime> чтобы небыло Convert
получился аналог SqlFunctions.DatePart("yyyy", x.DateTime1) == 2014
Смелости хватает только под ником писать?