【问题标题】:Filtering DataTable c#过滤数据表 c#
【发布时间】:2015-11-20 05:49:57
【问题描述】:

我在 DataTable 中有内容,我需要将其过滤到 3 个特定列表中。 在每组结果中,它们都将分别按开始日期排序。 1 天活动、2-13 天活动和 >14 天活动。

我尝试过使用 DataTable.Select,但它似乎不像我期望的那样工作(不知道为什么我期望它)。

这是我尝试过的

    DataTable allResults = ds.Tables["Items"];      
    DataTable set1 = new DataTable();
    DataTable set2 = new DataTable();
    DataTable set3 = new DataTable();

    DataRow[] result = allResults.Select("DATEDIFF(day,tcsi_startdate,tcsi_enddate) = 0");
    foreach (DataRow row in result)
    {
      set1.ImportRow(row);
    }
    result = allResults.Select("DATEDIFF(day,tcsi_startdate,tcsi_enddate) > 0 AND DATEDIFF(day,tcsi_startdate,tcsi_enddate) < 14");
    foreach (DataRow row in result)
    {
      set2.ImportRow(row);
    }
    result = allResults.Select("DATEDIFF(day,tcsi_startdate,tcsi_enddate) > 13");
    foreach (DataRow row in result)
    {
      set3.ImportRow(row);
    }

    set1.DefaultView.Sort = "tcsi_startdate";
    set2.DefaultView.Sort = "tcsi_startdate";
    set3.DefaultView.Sort = "tcsi_startdate";

有什么方法可以根据需要使用 DataTable.Select 对数据进行排序?

提前干杯

【问题讨论】:

    标签: c# datatable dataset filtering


    【解决方案1】:

    您可以使用LINQ-To-DataSet

    var filtered = from row in allresults.AsEnumerable()
                   let tcsi_startdate = row.Field<DateTime>("tcsi_startdate")
                   let tcsi_enddate = row.Field<DateTime>("tcsi_enddate")
                   let daysDiff = (tcsi_enddate - tcsi_startdate).Days 
                   where daysDiff > 0 && daysDiff < 14
                   select row;
    

    如果你想循环使用foreach:

    foreach(DataRow row in filtered){...}
    

    如果您想从IEnumerable&lt;DataRow&gt; 获得一个新的DataTable

    DataTable tblResult = filtered.CopyToDataTable();
    

    请注意,如果过滤结果中没有行,则会引发异常。你可以通过检查if(filtered.Any()){...}来确保。

    如果你想要DataRow[]:

    DataRow[] rowArray = filtered.ToArray();
    // or a list:
    List<DataRow> rowList = filtered.ToList();
    

    【讨论】:

    • 很棒的伙伴。所缺少的只是 tcsi_startdate 的 order。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2013-08-29
    • 2013-01-03
    相关资源
    最近更新 更多