Перевірити, чи існує значення в 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.