代码之家  ›  专栏  ›  技术社区  ›  Darth Continent

遍历DataTable以查找List对象中的元素?

  •  5
  • Darth Continent  · 技术社区  · 15 年前

    数据表 数据行 对象与泛型字符串中的项进行比较 列表

    我找到一个 blog post 将List的Find方法与委托一起使用,但是该示例有一个单独的类(Person),我尝试使用 一串

    // 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();
        }
    }
    

    但是,使用这种语法,我将接收“Cannot implicit convert type'string'to'bool'”作为 阻止。

    有人能澄清一下我做错了什么,以及怎样才能最好地完成我想做的事情吗?

    5 回复  |  直到 15 年前
        1
  •  3
  •   Anthony    15 年前

    相同的委托不同的方法。 您要使用的是“不存在”。 Find返回值,exists返回bool。

    if (lstAccounts.Exists(delegate(string sAccountNumber) { return sAccountNumber == drCurrentRow["AccountNumber"]; })
    
        2
  •  1
  •   Luiscencio    15 年前

    foreach (DataRow drCurrentRow in dtMyDataTable.Rows) 
    {
        if (lstAccounts.Contains(drCurrentRow["AccountNumber"].ToString()))
        {
            Found_DoSomething();
        }
        else
        {
            NotFound_DoSomethingElse();
        }
    }
    
        3
  •  1
  •   Kelsey    15 年前

    if (lstAccounts.Find 部分。

    这个 Find 将返回一个字符串,如果找到 if 需要布尔输出。

    更改语句以使用 Exists 结果。

        4
  •  1
  •   wonde    15 年前

    名单 查找 一串 所以你应该用 等于 == 。那样的话,if的条件就可以了。

        5
  •  0
  •   Community Mohan Dere    8 年前

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

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

    命名空间WebApplication1 公共部分类\u默认值:System.Web.UI.Page 受保护的无效页\u加载(对象发送方、事件参数) DataTable=新DataTable();

            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
    }
    

    从此url获取代码 Iterate through a DataTable to find elements in a List object?

    推荐文章