【问题标题】:Iterate through a DataTable to find elements in a List object?遍历 DataTable 以查找 List 对象中的元素?
【发布时间】:2010-03-24 15:49:43
【问题描述】:

当我遍历 DataTable 对象时,我需要对照通用字符串 List 中的项目检查它的每个 DataRow 对象。

我使用 List 的 Find 方法和委托找到了 blog post,但是虽然该示例有一个单独的类 (Person),但我正在尝试使用 string 的实例进行类似以下操作强> 对象:

// My definition of the List object.
List<string> lstAccountNumbers = new List<string>();
...

// I populate the List via its Add method.
...

foreach (DataRow drCurrentRow in dtMyDataTable.Rows) 
{
    if (lstAccounts.Find(delegate(string sAccountNumber) { return sAccountNumber == drCurrentRow["AccountNumber"]; })
    {
        Found_DoSomething();
    }
    else
    {
        NotFound_DoSomethingElse();
    }
}

但是,使用此语法,我收到 if 块的“无法将类型 'string' 隐式转换为 'bool'”。

有人可以澄清我做错了什么以及如何最好地完成我想做的事情吗?

【问题讨论】:

    标签: c# asp.net datatable datarow generic-list


    【解决方案1】:

    相同的委托不同的方法。 您想使用 Exists Not Find。 Find 返回一个值,而存在返回一个布尔值。

    if (lstAccounts.Exists(delegate(string sAccountNumber) { return sAccountNumber == drCurrentRow["AccountNumber"]; })
    

    【讨论】:

    • 你能把这个标记为正确答案吗,那太棒了
    • @达斯大陆:别听他的,他是肉身的恶魔
    • 根据你的个人资料@“所以把我的代表还给我”你是邪恶的,不是我。
    【解决方案2】:

    为什么这对你不起作用?

    foreach (DataRow drCurrentRow in dtMyDataTable.Rows) 
    {
        if (lstAccounts.Contains(drCurrentRow["AccountNumber"].ToString()))
        {
            Found_DoSomething();
        }
        else
        {
            NotFound_DoSomethingElse();
        }
    }
    

    【讨论】:

      【解决方案3】:

      问题出在if (lstAccounts.Find 部分。

      如果找到此 Find 将返回一个字符串,并且 if 期待 bool 输出。

      更改您的语句以使用Exists 或将您的原始值与Find 结果进行比较。

      【讨论】:

        【解决方案4】:

        列表 Find 方法返回一个 字符串,因此您应该使用 Equals 方法或 == 进行比较。在这种情况下,if 条件就可以了。

        【讨论】:

          【解决方案5】:

          尝试使用 linq,您可以创建一个接受 col 名称等的助手...

          使用系统; 使用 System.Collections; 使用 System.Collections.Generic; 使用 System.Data; 使用 System.Linq; 使用 System.Web; 使用 System.Web.UI; 使用 System.Web.UI.WebControls;

          命名空间 WebApplication1 { 公共部分类_默认:System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { 数据表表 = 新数据表(); table.Columns.Add("col1", typeof(string));

                  DataRow row;
                  row = table.NewRow();
                  row["col1"] = "123";
                  table.Rows.Add(row);
                  row = table.NewRow();
                  row["col1"] = "456";
                  table.Rows.Add(row);
          
                  LinqList<DataRow> rows = new LinqList<DataRow>(table.Rows);
                  // do a simple select
                 DataRow [] selectedRows = (from r in rows where (string)r["col1"] == "123" select r).ToArray();
          
                  if(selectedRows.Length > 0)
                  {
                      lable1.Text = "success";
                  }
                  else
                  {
                      lable1.Text = "failed";
                  }
              }
          }
          
          
          // simple wrapper that implements IEnumerable<T>
          internal class LinqList<T> : IEnumerable<T>, IEnumerable
          {
              IEnumerable items;
          
              internal LinqList(IEnumerable items)
              {
                  this.items = items;
              }
          
              #region IEnumerable<DataRow> Members
              IEnumerator<T> IEnumerable<T>.GetEnumerator()
              {
                  foreach (T item in items)
                      yield return item;
              }
          
              IEnumerator IEnumerable.GetEnumerator()
              {
                  IEnumerable<T> ie = this;
                  return ie.GetEnumerator();
              }
              #endregion
          }
          

          }

          取自该网址的代码 Iterate through a DataTable to find elements in a List object?

          【讨论】:

            猜你喜欢
            • 2020-04-07
            • 1970-01-01
            • 2012-01-09
            • 1970-01-01
            • 2018-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-26
            相关资源
            最近更新 更多