c# - 用于日期比较的动态 linq 查询 asp.net core
问题描述
我有一个简化版本的动态主查询,如下所示:
var items = context.itemsGalore.Where(where).ToList();
Where 条件的 where 是动态构建的,如下所示。
if(compare == "Greater")
{
where = String.Format("{0} > {1}", DueDate, DateTime.ParseExact(dtValue.ToShortDateString(), "MM/dd/yyyy", CultureInfo.InvariantCulture));
}
else if(compare == "Lesser")
{
where = String.Format("{0} < {1}", field, DateTime.ParseExact(dtValue.ToShortDateString(), "MM/dd/yyyy", CultureInfo.InvariantCulture));
}
但是我收到以下错误:运算符'<'与操作数类型'DateTime'和'Int32'不兼容
我该如何解决这个问题?
解决方案
在本节的代码中:
else if(compare == "Lesser")
{
where = String.Format("{0} < {1}", field, DateTime.ParseExact(dtValue.ToShortDateString(), "MM/dd/yyyy", CultureInfo.InvariantCulture));
}
错误是因为变量“字段”的数据类型不是日期时间。
例如运行此代码:
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
var compare = "Lesser";
var where = "";
var DueDate = DateTime.Now;
var dtValue = DateTime.Now;
var field = 1;
if(compare == "Greater")
{
where = String.Format("{0} > {1}", DueDate, DateTime.ParseExact(dtValue.ToShortDateString(), "MM/dd/yyyy", CultureInfo.InvariantCulture));
}
else if(compare == "Lesser")
{
where = String.Format("{0} < {1}", field, DateTime.ParseExact(dtValue.ToShortDateString(), "MM/dd/yyyy", CultureInfo.InvariantCulture));
}
Console.WriteLine(where);
}
}
输出是这样的:“1 < 10/07/2021 00:00:00”,您不能将其用作 where 子句。
推荐阅读
- html - 选中选择伪类
- php - 如何更改函数中模式的字符值?
- json - 颜色选择器到文本模式
- php - 重命名后 Laravel 方法不存在
- python - 熊猫读取excel:ValueError
- ios - 无法使用“”类型的参数列表调用“*” - Swift 泛型问题
- php - 类 stdClass 的对象无法转换为 int codeigniter
- android - Android Studio 更新到 3.3.1 后库的 AndroidX 转换失败,这是 Jetifier 错误吗?
- wordpress - 在管理订单中使用 GTIN 编号搜索产品,同时在 woocommerce 中从后端手动添加新产品
- ruby-on-rails - rails f.number_field vs number_field_tag