首页 > 解决方案 > 用于日期比较的动态 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'不兼容

我该如何解决这个问题?

标签: c#asp.net-coredynamicquery

解决方案


在本节的代码中:

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 子句。


推荐阅读