我有数据表,该表有一个名为joiningDate
的列,格式为mm-dd-yyyy
。我想根据当前月份过滤该表,因此我使用DataView
进行此类操作,我的代码是:
DateTime now = DateTime.Now;
DataView dvUpcomingLeave = new DataView(dtLeaves);
dvUpcomingLeave.RowFilter = "DATEPART(Month, joiningDate) = " + now.Month;
但它向我显示错误:
表达式包含未定义的函数调用DATEPART()。
我认为因为DATEPART()
不是ADO.NET的功能,所以任何人都可以帮助我如何使用DataView
RowFilter
来解决这个问题。
答案 0 :(得分:0)
您无法使用RowFilter
表达式提供的功能(与DataColumn的Expression属性相同)
但是你可以用这样的东西达到你的目标
DataView v = dtLeaves.AsEnumerable()
.Where(x => x.Field<DateTime>("joiningDate")
.Month == DateTime.Today.Month)
.CopyToDataTable().DefaultView;
警告,如果Where
返回的输入IEnumerable为空,则此CopyToDataTable将失败,因此最好将其拆分为多行,并在进行下一行之前测试结果步骤
var temp = dtLeaves.AsEnumerable()
.Where(x => x.Field<DateTime>("joiningDate")
.Month == DateTime.Today.Month);
if(temp.Any())
DataView dvUpcomingLeave = temp.CopyToDataTable().DefaultView;
答案 1 :(得分:0)
您必须将日期值放在引号或主题标签中(Source: csharp-examples.net)
所以,在你的情况下:
@Override
public void execute(final Tuple _tuple) {
insertQueue.add(_tuple);
}
或
dvUpcomingLeave.RowFilter = String.Format("DATEPART(Month, joiningDate) = '{0}'",now.Month);