Поскольку я выполняю итерации через Объект dataTable, я должен проверить каждый из его объектов DataRow против объектов в универсальном списке строк.
Я нашел сообщение в блоге с помощью метода Находки Списка вместе с делегатом, но тогда как тот пример имеет отдельный класс (Человек), я делаю попытку чего-то как следующее использование экземпляра строкового объекта:
// My definition of the List object.
List lstAccountNumbers = new List();
...
// 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();
}
}
Однако с этим синтаксисом я получаю, "Не может неявно преобразовать тип 'строка' в 'bool'" для если блок.
Кто-то мог разъяснить то, что я делаю неправильно и как лучше всего выполнить то, что я пытаюсь сделать?
Тот же делегат Другой метод. Вы хотите использовать "Существует, а не найти". Найти Возвращает значение, в то время как существует возвращает логическое значение.
if (lstAccounts.Exists(delegate(string sAccountNumber) { return sAccountNumber == drCurrentRow["AccountNumber"]; })
почему это не сработает для вас?
foreach (DataRow drCurrentRow in dtMyDataTable.Rows)
{
if (lstAccounts.Contains(drCurrentRow["AccountNumber"].ToString()))
{
Found_DoSomething();
}
else
{
NotFound_DoSomethingElse();
}
}
Метод list Find возвращает string, поэтому его следует сравнить с помощью метода Equals или ==. В этом случае условие if будет в порядке.
Проблема заключается в части if (lstAccounts.Find
.
Эта Find
вернет строку, если найдена, а if
ожидает вывода bool.
Измените инструкцию, чтобы использовать Exists
или сравните исходное значение с результатом Find
.
попробуйте использовать linq, вы можете создать помощник, который принимает имя столбца и т. Д.
using System; используя System.Collections; используя System.Collections.Generic; используя System.Data; используя System.Linq; using System.Web; использование System.Web.UI; использование System.Web.UI.WebControls;
пространство имен WebApplication1 { открытый частичный класс _Default: System.Web.UI.Page { protected void Page_Load (объект-отправитель, EventArgs e) { DataTable table = new DataTable (); { {1}} 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 для поиска элементов в списке объект?