在 DataSet.Select() 方法的过滤器表达式中使用 getdate()

using getdate() in filter expression of DataSet.Select() method

我想知道在过滤器表达式中使用 SQL 函数(在本例中为 getdate())的可能性,如下所述:

            DataTable dataTable = new DataTable();
            dataTable.Columns.Add("MyDate", typeof(DateTime));
            dataTable.Columns.Add("MyString", typeof(string));
            var row = dataTable.NewRow();
            row[0] = DateTime.Now.AddDays(1);
            row[1] = "XXX";

            dataTable.Rows.Add(row);

            //Evaluation

            //Example 1 - IT WORKS
            //var rows = dataTable.Select("([MyString] = 'XXX') And [MyDate] > #2012/03/03#"); 

            //Example 2 - IT DOESN'T WORK
            var rows = dataTable.Select("([MyString] = 'XXX') And [MyDate] >= (GETDATE())");

有人知道这是否可能吗? 由于某些原因,我无法更改仅评估字符串的原始代码,我需要获取当前日期并在此基础上再添加 2 天。像 DATEADD(day,2,[MyDate])

我知道一种方法是更改​​源代码并创建带有日期的文字字符串,如示例 2。

感谢任何帮助。谢谢!

您可以查看此 link 以检查是否支持类似的内容: http://www.csharp-examples.net/dataview-rowfilter/

我快速检查了一下,似乎不支持日期函数。 我是怎么发现 link 的?我刚刚在谷歌上搜索了您正在使用的 api,然后首先找到了这个 link:

https://msdn.microsoft.com/en-us/library/system.data.datatable.select%28v=vs.110%29.aspx

点击select一串版本,来到

https://msdn.microsoft.com/en-us/library/det4aw50(v=vs.110).aspx

然后我开始阅读。 我传递所有这些信息是因为我认为浏览互联网上已有的内容并知道要查找什么以及如何查找与编程本身一样重要。

在您的情况下,您当然可以使用 DateTime.today 获取当前日期,并创建一个 select 字符串来利用该结果。不要将 DateTime.today 作为字符串放在 select 中,那样也不起作用。

您可以将 DateTime.Now 连接到您的过滤器中:

var filter = string.Format("[MyString] = 'XXX' And [MyDate] >= #{0:yyyy-MM-dd}#", DateTime.Now);
var rows = dataTable.Select(filter);

如果需要两天以上的话,可以把DateTime.Now改成DateTime.Now.AddDays(2).Date