[英]How to use Row filter on DataView
我有数据表,该表具有一列名为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
解决此问题。
您不能使用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;
您必须将Date-Values放在引号或#标签中( 来源:csharp-examples.net )
因此,在您的情况下:
dvUpcomingLeave.RowFilter = String.Format("DATEPART(Month, joiningDate) = '{0}'",now.Month);
要么
dvUpcomingLeave.RowFilter = String.Format("DATEPART(Month, joiningDate) = #{0}#",now.Month);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.