Linq Expression Convert не через Expression.Convert
От: Alexandr Sulimov Украина www.ase.com.ua
Дата: 13.08.14 19:07
Оценка:
    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
Смелости хватает только под ником писать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.