【问题标题】:Depending on table.Tablename取决于 table.Tablename
【发布时间】:2013-01-13 13:03:43
【问题描述】:

如果相关表称为table1table2,我想运行loop。目前,我正在这样做:

foreach (DataTable table in DtSet.Tables)
{
    if ((table.TableName == "table1")||(table.TableName == "table2"))
    {
        foreach (DataRow sourceRow in table.Rows)
        {
        }
    }
}

有没有办法修改此代码,以便在无需遍历整个数据集的情况下完成名称检查? 非常感谢。

【问题讨论】:

标签: c# for-loop datatable dataset


【解决方案1】:

您可以使用接受表名作为参数的indexers 访问TableName。索引器仍然在内部使用循环。

var table1 = dtSet.Tables["table1"];
var table2 = dtSet.Tables["table2"];

if (table1 != null)
{
    DoOperation(table1);
}

if (table2 != null)
{
    DoOperation(table2);
}

【讨论】:

    【解决方案2】:

    您可以遍历两个名称(而不是遍历所有表),并为每个名称尝试按名称从DtSet.Tables 获取一个表。

    【讨论】:

      【解决方案3】:

      像……这样的东西怎么样?

      ProcessTableData(DtSet.Tables["table1"]);
      ProcessTableData(DtSet.Tables["table2"]);    
      
      
      void ProcessTableData(DataTable dataTable)
      {
          if (dataTable == null)
              return;
      
          foreach (DataRow sourceRow in dataTable.Rows)
          {
          }
      }
      

      【讨论】:

        【解决方案4】:

        你可以写

        if ((DtSet.Tables.Contains("table1")
        {
            foreach (DataRow sourceRow in DtSet.Tables["table1"])
            {
            }
        }
        

        它内部仍然会有一个循环。但会更干净。

        完全没有循环是不可能的。

        【讨论】:

          【解决方案5】:

          使用包含:

            if ((table.TableName.Contains("table1"))||(table.TableName.Contains("table2"))) 
          {
              foreach (DataRow sourceRow in table.Rows) 
              {
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-06-14
            • 2016-11-30
            • 1970-01-01
            • 2011-08-09
            • 2011-10-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多