У меня есть DataTable с двумя столбцами Автор и Имя книги .
Я хочу проверить, существует ли данное строковое значение Author в DataTable. Есть ли какой-нибудь встроенный метод для проверки, например, для массивов array.contains?
Вопрос: что, если мы не знаем заголовки столбцов и хотим узнать, существует ли какое-либо значение ячейки PEPSIв каких-либо столбцах row'c? Я могу зациклить все это, чтобы узнать, но есть ли способ лучше? -
Добавьте их System.Data.DataSetExtensionsв справочник и using System.Linq;в класс использования
5377037
Что из двух решений будет быстрее?
Пол Александр
1
@PaulAlexander: большой разницы нет. Но старый DataTable.Selectсинтаксис ограничен, тогда как LINQ может использовать полную платформу .NET или настраиваемые методы. Так что, только если вы застряли на .NET 2, вы должны использовать его DataTable.Select, иначе я бы всегда предпочел LINQ
Тим Шмелтер,
Если вы заботитесь о производительности и имеете большие наборы данных, tbl.Select()это значительно быстрее, чем другие подходы.
HerrimanCoder
@TimSchmelter - Великий Тим. Но если пользователь не знает имени столбца, но все еще хочет получить все строки, соответствующие поисковому значению, как это можно сделать?
table.Any(t => t.Author == author);
Ответы:
Вы можете использовать
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... }
Да, вы можете использовать этот запрос:
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
, иначе я бы всегда предпочел LINQtbl.Select()
это значительно быстрее, чем другие подходы.Вы можете использовать Linq. Что-то типа:
bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;
источник
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name"); if (rw != null) { // row exists }
добавьте в свой раздел using:
using System.Linq;
и добавить :
к ссылкам.
источник
У вас должна быть возможность использовать метод DataTable.Select () . Вы можете нам это вот так.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0) ...
Функция Select () возвращает массив строк данных для результатов, соответствующих оператору where.
источник
вы можете установить базу данных как IEnumberable и использовать linq, чтобы проверить, существуют ли значения. проверьте эту ссылку
LINQ Query on Datatable, чтобы проверить, существует ли запись
приведенный пример
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
Вы можете дополнить где угодно
источник