【问题标题】:Count number of rows in DataTable that meet some criteria计算 DataTable 中满足某些条件的行数
【发布时间】:2015-09-05 17:32:29
【问题描述】:
DataTable dt = GetDataTable();

if(field=="TaskId")
{
    string value = ((e.Item as GridFilteringItem)[field] as GridTableCell).Column.CurrentFilterValue
    int VALUE = Int32.Parse(value);           
    int numberOfRecords = dt.Select("TaskId = VALUE").Length;

我想计算DataTable 中具有TaskId == value 的行数。

此代码抛出错误,提示找不到列 TaskId[value]。

【问题讨论】:

  • 可能是带有 RowFilter stackoverflow.com/a/3060221/695 的 DataView
  • 行过滤器也尝试过,但是当我提到直接列值 2 或 3 时,这里实际发生的不是 VALUE,然后它正在工作..但我希望根据在 Radgrid 中输入的值动态地使用它..

标签: asp.net


【解决方案1】:

替换这一行

int numberOfRecords = dt.Select("TaskId = VALUE").Length;

int numberOfRecords = dt.Select("TaskId = " + VALUE).Length;

您在 ("") 内传递了 VALUE

【讨论】:

    【解决方案2】:

    您可以使用简单的 for 循环来迭代每一行,查看每一行的 TaskId 字段。如果符合条件,就增加一个计数器。

    string value = ((e.Item as GridFilteringItem)[field] as GridTableCell).Column.CurrentFilterValue
    
    int count = 0;
    for(int i = 0; i < dt.Rows.Count; i++)
    {
        if(dt.Rows[i]["TaskId"].ToString() == value)
        {
            count++;
        }
    }
    

    或者你也可以使用 LINQ。 rows 变量将保存符合您的条件的 DataRows 集合。

    var rows = from row in dt.AsEnumerable()
               where row.Field<string>("TaskId") == value
               select row;
    
    int count = rows.Count<DataRow>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-02
      • 2019-12-04
      • 1970-01-01
      • 2020-10-10
      • 2015-03-21
      • 1970-01-01
      • 2013-10-14
      • 2013-05-09
      相关资源
      最近更新 更多