我正在做一个项目,我在按日期过滤记录时遇到问题。我有一个通用的方法来搜索任何实体的记录,我的 searchQuery 就像“2014-03-15”,记录日期时间格式是“2014-03-15 00:00:00.000”,我的 sql 查询应该转换日期时间sql 仅记录日期格式,然后将其与我的查询进行比较,问题是从记录生成的日期与我的查询不相等,我使用 datepart 函数然后连接字符串结果,但结果会像' 2014- 3- 15' 并导致不匹配,如果存在一种方法可以在 sqlfunctions 中将字符串转换为日期,那就太好了,这是我的代码
var date = Expression.Convert(propExp, typeof(Nullable<DateTime>));
var datePart = typeof(SqlFunctions).GetMethod("DatePart",
new Type[] { typeof(string), typeof(Nullable<DateTime>) });
var month = Expression.Call(datePart, Expression.Constant("MM"), date);
var toDouble = Expression.Convert(month, typeof(Nullable<double>));
var monthPartToString = typeof(SqlFunctions).GetMethod("StringConvert",
new Type[] { typeof(Nullable<double>) });
var monthPart = Expression.Call(monthPartToString, toDouble);
var dd = Expression.Call(datePart, Expression.Constant("dd"), date);
var toDoubledd = Expression.Convert(dd, typeof(Nullable<double>));
var ddPartToString = typeof(SqlFunctions).GetMethod("StringConvert",
new Type[] { typeof(Nullable<double>) });
var ddPart = Expression.Call(ddPartToString, toDoubledd);
var yy = Expression.Call(datePart, Expression.Constant("yyyy"), date);
var toDoubleyy = Expression.Convert(yy, typeof(Nullable<double>));
var yyPartToString = typeof(SqlFunctions).GetMethod("StringConvert",
new Type[] { typeof(Nullable<double>) });
var yyPart = Expression.Call(yyPartToString, toDoubleyy);
var conCat4 = typeof(string).GetMethod("Concat",
new Type[] { typeof(string), typeof(string), typeof(string), typeof(string) });
var conCat2 = typeof(string).GetMethod("Concat",
new Type[] { typeof(string), typeof(string) });
var delim = Expression.Constant("-");
stringProp = Expression.Call(conCat2, Expression.Call(conCat4, yyPart, delim, monthPart, delim), ddPart);
生成的sql是
select * from orders where STR( CAST( DATEPART(yyyy, CreatedOn) AS float)) + N'-' + STR( CAST( DATEPART(MM,CreatedOn) AS float)) + N'-' + STR( CAST( DATEPART(dd, CreatedOn ) AS float)) LIKE N'%2014-03-15%'
我需要一种方法来将此字符串转换为日期sqlFunctions