Ho DataTable con due colonne Author e Bookname .
Voglio verificare se il valore di stringa specificato Author esiste già in DataTable. C'è un metodo integrato per controllarlo, come per gli array array.contains
?
Ho DataTable con due colonne Author e Bookname .
Voglio verificare se il valore di stringa specificato Author esiste già in DataTable. C'è un metodo integrato per controllarlo, come per gli array array.contains
?
Risposte:
Puoi usare LINQ-to-DataSet
con Enumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
Un altro approccio consiste nell'utilizzare DataTable.Select
:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
D: cosa succede se non conosciamo le intestazioni delle colonne e vogliamo scoprire se esiste un valore di cella
PEPSI
in qualsiasi colonna delle righe? Posso ripetere tutto per scoprirlo, ma c'è un modo migliore? -
Sì, puoi utilizzare questa query:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
per fare riferimento e using System.Linq;
utilizzare la classe
DataTable.Select
sintassi è limitata mentre LINQ può utilizzare il framework .NET completo o metodi personalizzati. Quindi solo se sei bloccato su .NET 2 dovresti usare DataTable.Select
, altrimenti preferirei sempre LINQ
tbl.Select()
è notevolmente più veloce rispetto agli altri approcci.
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
aggiungi alla tua clausola using:
using System.Linq;
e aggiungi :
System.Data.DataSetExtensions
ai riferimenti.
Dovresti essere in grado di utilizzare il metodo DataTable.Select () . Puoi usarlo in questo modo.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
La funzione Select () restituisce un array di DataRows per i risultati che corrispondono all'istruzione where.
è possibile impostare il database come IEnumberable e utilizzare linq per verificare se i valori esistono. controlla questo link
LINQ Query su Datatable per verificare se il record esiste
l'esempio fornito è
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
potresti integrare dove con qualsiasi
table.Any(t => t.Author == author);