У мене є таблиця даних з двома стовпцями Автор та Назва книги .
Я хочу перевірити, чи вказане значення рядка Author вже існує в DataTable. Чи є якийсь вбудований метод для перевірки, як для масивів array.contains
?
У мене є таблиця даних з двома стовпцями Автор та Назва книги .
Я хочу перевірити, чи вказане значення рядка Author вже існує в DataTable. Чи є якийсь вбудований метод для перевірки, як для масивів array.contains
?
Відповіді:
Ви можете використовувати LINQ-to-DataSet
з Enumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
Інший підхід полягає у використанні DataTable.Select
:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
З: Що, якщо ми не знаємо заголовків стовпців і хочемо з’ясувати, чи існує якесь значення комірки
PEPSI
в будь-якому стовпці рядків c? Я можу зациклювати все це, щоб дізнатись, але чи є кращий спосіб? -
Так, ви можете використовувати цей запит:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
до посилання та using System.Linq;
до використання класу
DataTable.Select
синтаксис обмежений, тоді як LINQ може використовувати повну платформу .NET або власні методи. Тож лише якщо ви застрягли в .NET 2, вам слід скористатися DataTable.Select
, інакше я завжди віддав би перевагу LINQ
tbl.Select()
це значно швидше, ніж інші підходи.
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
додайте до свого пропозиції використання:
using System.Linq;
і додати:
System.Data.DataSetExtensions
до посилань.
Ви повинні мати можливість використовувати метод DataTable.Select () . Ви можете нам це зробити так.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
Функція Select () повертає масив DataRows для результатів, що відповідають оператору where.
Ви можете встановити базу даних як IEnumberable і скористатися linq, щоб перевірити, чи існують значення. перевірте це посилання
Запит LINQ на таблиці даних, щоб перевірити, чи існує запис
наведений приклад
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
ви можете доповнити де-небудь будь-яким
table.Any(t => t.Author == author);