迭代 DataTable 以查找 List 对象中的元素?

发布于 2024-08-26 18:51:49 字数 893 浏览 8 评论 0原文

当我迭代 DataTable 对象时,我需要根据通用字符串 List 中的项目检查其每个 DataRow 对象。

我找到了一篇博客文章使用 List 的 Find 方法和委托,但尽管该示例有一个单独的类 (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’”。

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

As I iterate through a DataTable object, I need to check each of its DataRow objects against the items in a generic string List.

I found a blog post using the List's Find method along with a delegate, but whereas that example has a separate class (Person), I'm attempting something like the following using an instance of the string object:

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

However, with this syntax I'm receiving "Cannot implicitly convert type 'string' to 'bool'" for the if block.

Could someone please clarify what I'm doing wrong and how best to accomplish what I'm trying to do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

生来就爱笑 2024-09-02 18:51:49

相同的委托不同的方法。
您想使用“Exists Not Find”。
Find 返回值,exists 返回布尔值。

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

Same Delegate Different method.
You want to use Exists Not Find.
Find Returns a value while exists returns a bool.

if (lstAccounts.Exists(delegate(string sAccountNumber) { return sAccountNumber == drCurrentRow["AccountNumber"]; })
窝囊感情。 2024-09-02 18:51:49

为什么这对你不起作用?

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

why would not this work for you?

foreach (DataRow drCurrentRow in dtMyDataTable.Rows) 
{
    if (lstAccounts.Contains(drCurrentRow["AccountNumber"].ToString()))
    {
        Found_DoSomething();
    }
    else
    {
        NotFound_DoSomethingElse();
    }
}
心碎无痕… 2024-09-02 18:51:49

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

如果找到,此 Find 将返回一个字符串,而 if 需要 bool 输出。

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

The problem is the if (lstAccounts.Find part.

This Find will return a string if found and the if is expecting a bool output.

Change your statement to use Exists or compare your original value to the Find result.

茶花眉 2024-09-02 18:51:49

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

The list Find method returns a string so you should compare it using Equals method or ==.In that case the if condition will be fine.

过潦 2024-09-02 18:51:49

; 创建一个接受 col 名称等的帮助程序;

尝试使用 linq,您可以使用 System
使用系统集合;
使用 System.Collections.Generic;
使用系统数据;
使用 System.Linq;
使用系统.Web;
使用 System.Web.UI;
使用 System.Web.UI.WebControls;

命名空间 WebApplication1
{
公共部分类 _Default :System.Web.UI.Page
{
protected void Page_Load(对象发送者,EventArgs e)
{
DataTable 表 = 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
}

代码

从此网址获取
迭代 DataTable 以查找列表中的元素对象?

try using linq, you can create a helper that takes in col name etc...

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace 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
}

}

taken code from this url
Iterate through a DataTable to find elements in a List object?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文