У меня есть DataTable с двумя столбцами Автор и Имя книги .
Я хочу проверить, существует ли данное строковое значение Author в DataTable. Есть ли какой-нибудь встроенный метод для проверки, например, для массивов array.contains
?
У меня есть DataTable с двумя столбцами Автор и Имя книги .
Я хочу проверить, существует ли данное строковое значение 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
в каких-либо столбцах row'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:
using System.Linq;
и добавить :
System.Data.DataSetExtensions
к ссылкам.
У вас должна быть возможность использовать метод DataTable.Select () . Вы можете нам это вот так.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
Функция Select () возвращает массив строк данных для результатов, соответствующих оператору where.
вы можете установить базу данных как IEnumberable и использовать linq, чтобы проверить, существуют ли значения. проверьте эту ссылку
LINQ Query on Datatable, чтобы проверить, существует ли запись
приведенный пример
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
Вы можете дополнить где угодно
table.Any(t => t.Author == author);