Eu tenho DataTable com duas colunas Author e Bookname .
Quero verificar se o valor de string fornecido Author já existe na DataTable. Existe algum método integrado para verificar isso, como para Arrays array.contains
?
Eu tenho DataTable com duas colunas Author e Bookname .
Quero verificar se o valor de string fornecido Author já existe na DataTable. Existe algum método integrado para verificar isso, como para Arrays array.contains
?
Respostas:
Você pode usar LINQ-to-DataSet
com Enumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
Outra abordagem é usar DataTable.Select
:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
P: e se não conhecermos os cabeçalhos das colunas e quisermos descobrir se
PEPSI
existe algum valor de célula em alguma coluna de rows? Posso fazer um loop de tudo para descobrir, mas existe uma maneira melhor? -
Sim, você pode usar esta consulta:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
para referência e using System.Linq;
para usar a classe
DataTable.Select
sintaxe antiga é limitada, enquanto o LINQ pode usar a estrutura .NET completa ou métodos personalizados. Portanto, você deve usar apenas se estiver preso ao .NET 2 DataTable.Select
, caso contrário, eu sempre preferiria LINQ
tbl.Select()
é dramaticamente mais rápido do que as outras abordagens.
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
adicione à sua cláusula using:
using System.Linq;
e adicione :
System.Data.DataSetExtensions
às referências.
Você deve ser capaz de usar o método DataTable.Select () . Você pode nos assim.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
A função Select () retorna uma matriz de DataRows para os resultados correspondentes à instrução where.
você pode definir o banco de dados como IEnumberable e usar linq para verificar se os valores existem. verifique este link
LINQ Query on Datatable para verificar se existe registro
o exemplo dado é
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
você poderia complementar onde com qualquer
table.Any(t => t.Author == author);