6

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

我发现了一篇使用 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();
    }
}

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

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

4

5 回答 5

3

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

if (lstAccounts.Exists(delegate(string sAccountNumber) { return sAccountNumber == drCurrentRow["AccountNumber"]; })
于 2010-03-24T15:55:26.083 回答
1

为什么这对你不起作用?

foreach (DataRow drCurrentRow in dtMyDataTable.Rows) 
{
    if (lstAccounts.Contains(drCurrentRow["AccountNumber"].ToString()))
    {
        Found_DoSomething();
    }
    else
    {
        NotFound_DoSomethingElse();
    }
}
于 2010-03-24T15:55:08.860 回答
1

问题是if (lstAccounts.Find部分。

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

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

于 2010-03-24T16:00:35.153 回答
1

list Find方法返回一个字符串,因此您应该使用Equals方法或==对其进行比较。在这种情况下,if 条件会很好。

于 2010-03-24T16:01:06.713 回答
0

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

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

命名空间 WebApplication1 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { DataTable table = new DataTable(); 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
}

}

从此 url 获取代码 遍历 DataTable 以查找 List 对象中的元素?

于 2010-03-24T18:52:44.797 回答