c# - 过滤数据表 c#

标签 c# datatable dataset filtering

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

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

这是我试过的

    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 对数据进行排序?

提前干杯

最佳答案

您可以使用 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){...}

如果你想要一个新的DataTable来自 IEnumerable<DataRow> :

DataTable tblResult = filtered.CopyToDataTable();

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

如果你想要一个DataRow[] :

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

关于c# - 过滤数据表 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222390/

相关文章:

c# - 使用委托(delegate)时显示错误

javascript - DataTable 无法应用样式

python - 在 Python 中将行从一个 CSV 附加到另一个

python - 使用sklearn.model_selection分割不平衡数据集

python - 为什么我不能使用 Gensim 下载 API 下载数据集

c# - 哪个版本的 using 语句是正确或最安全的?

c# - 使用 EntityFramework 和 .NET Native 时出现 PlatformNotSupportedException

c# - 使用导致错误的 Linq 更新 NVarChar(MAX) 列

php - 如何打印没有数据表的页面

c# - 如何将新的DataRow 添加到DataTable 中?