繁体   English   中英

如何在DataView上使用行过滤器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM