我需要构建一个动态的where语句,但我仍然坚持将DateTime
转换为字符串。请查看我的代码并建议如何将DateTime
类型与字符串进行比较。
foreach (var f in filter.filters)
{
if (f.Key.ToLower().Contains("date") || f.Key.ToLower().Contains("time"))
{
queryWhere += "CONVERT(VARCHAR(25)," + f.Key + ",126).Contains(\"" + f.Value + "\") AND ";
}
else
{
queryWhere += f.Key + ".Contains(\"" + f.Value + "\") AND ";
}
}
return queryWhere = queryWhere.Remove(queryWhere.Length - 5);
Filter对象的定义:
public class Filter
{
public string orderby { get; set; } = "Id";
public Dictionary<string, string> filters { get; set; }
}
在JSON中过滤对象
{
"orderby": "Id",
"filters": {
"Status": "OK",
"CreateDate" : "2016-02"
},}
var query的内容:
"Status.Contains(\"OK\") AND CONVERT(VARCHAR(25),CreateDate,126).Contains(\"2016-02\")"
ParseException错误:
System.Linq.Dynamic.Core.dll中出现类型为“System.Linq.Dynamic.Core.Exceptions.ParseException”的异常但未在用户代码中处理附加信息:类型中不存在适用的方法“VARCHAR” 'ServersViewModel'
我已从CONVERT()
更改为.ToString()
但我已获得警告
queryWhere += f.Key + ".ToString().Contains(\"" + f.Value + "\") AND ";
警告:
Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryCompilationCont extFactory[8]
LINQ表达式'[srv].CreateDate.ToString().Contains("2016-02")'
可以 不予翻译,将在当地进行评估。要配置此警告,请使用DbContextOptionsBuilder.ConfigureWarnings API(事件ID“RelationalEventId.QueryClientEvaluationWarning”)。重写DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext时,可以使用ConfigureWarnings。
任何想法?