Перевірити, чи існує значення в dataTable?


91

У мене є таблиця даних з двома стовпцями Автор та Назва книги .

Я хочу перевірити, чи вказане значення рядка Author вже існує в DataTable. Чи є якийсь вбудований метод для перевірки, як для масивів array.contains?


8
LINQ? table.Any(t => t.Author == author);
— Давіо

Відповіді:


206

Ви можете використовувати 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;до використання класу
— 5377037

З двох рішень, яке було б швидшим?
— Пол Олександр

1
@PaulAlexander: великої різниці немає. Але старий DataTable.Selectсинтаксис обмежений, тоді як LINQ може використовувати повну платформу .NET або власні методи. Тож лише якщо ви застрягли в .NET 2, вам слід скористатися DataTable.Select, інакше я завжди віддав би перевагу LINQ
— Тім Шмельтер

Якщо ви дбаєте про продуктивність і маєте великі набори даних, tbl.Select()це значно швидше, ніж інші підходи.
— HerrimanCoder

@TimSchmelter - Великий Тім. Але якщо користувач не знає назви стовпця, але все одно хоче отримати всі рядки, які відповідають значенню пошуку, як це можна зробити?
— Чандан Кумар

13

Ви можете використовувати Linq. Щось на зразок:

bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;

8
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}

додайте до свого пропозиції використання:

using System.Linq;

і додати:

System.Data.DataSetExtensions

до посилань.


5

Ви повинні мати можливість використовувати метод DataTable.Select () . Ви можете нам це зробити так.

if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
    ...

Функція Select () повертає масив DataRows для результатів, що відповідають оператору where.


0

Ви можете встановити базу даних як IEnumberable і скористатися linq, щоб перевірити, чи існують значення. перевірте це посилання

Запит LINQ на таблиці даних, щоб перевірити, чи існує запис

наведений приклад

var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...

ви можете доповнити де-небудь будь-яким

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.