Я перемещаю некоторый код из asp. net в asp. net core, и я не могу найти способ сравнить даты в строковом формате "yyyyMMdd", ie Datediff (день, столбец, «значение») == x , база данных - SQLServer, и изменение типа столбца не является вариантом.
Я использую рефлексию, которая усложняет вещи.
код в asp. net:
public static Expression ExpressionsDiffDate(Expression cte, Expression property)
{
MethodInfo DateDiff = typeof(SqlFunctions).GetMethod("DateDiff", new Type[] { typeof(string), typeof(string), typeof(string) });
if (property.Type == typeof(DateTime) || property.Type == typeof(DateTime?))
{
DateDiff = typeof(SqlFunctions).GetMethod("DateDiff", new Type[] { typeof(string), typeof(DateTime), typeof(DateTime) });
property = Expression.Convert(property, typeof(DateTime?));
cte = ConvertExpressionToDate(cte);
}
return Expression.Call(
DateDiff,
Expression.Constant("day"),
cte,
property
);
}
В этом примере я использую метод datediff в классе sqlfunctions, который имеет много перегрузок, в зависимости от типа столбца, который я использую. тот, который принимает datetime в качестве параметров, или тот, который принимает строки.
Мне удалось это сделать для столбцов типа DateTime in. net core
public static Expression ExpressionsDiffDate(Expression cte, Expression property)
{
ParameterExpression exFun = Expression.Parameter(typeof(DbFunctions));
MethodInfo DateDiff = typeof(SqlServerDbFunctionsExtensions).GetMethod("DateDiffDay", new Type[] { typeof(DbFunctions), typeof(DateTime), typeof(DateTime) });
return Expression.Call(
DateDiff,
exFun,
cte,
property
);
}
Но я могу Не могу понять, как это сделать для столбцов с типом string, поскольку у него нет перегрузок, которые принимают строки.
Спасибо