J'ai DataTable avec deux colonnes Author et Bookname .
Je veux vérifier si la valeur de chaîne donnée Author existe déjà dans le DataTable. Existe-t-il une méthode intégrée pour le vérifier, comme pour les tableaux array.contains
?
J'ai DataTable avec deux colonnes Author et Bookname .
Je veux vérifier si la valeur de chaîne donnée Author existe déjà dans le DataTable. Existe-t-il une méthode intégrée pour le vérifier, comme pour les tableaux array.contains
?
Réponses:
Vous pouvez utiliser LINQ-to-DataSet
avec Enumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
Une autre approche consiste à utiliser DataTable.Select
:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
Q: que se passe-t-il si nous ne connaissons pas les colonnes Headers et que nous voulons savoir si une valeur de cellule
PEPSI
existe dans les colonnes des lignes? Je peux tout boucler pour le savoir, mais y a-t-il une meilleure façon? -
Oui, vous pouvez utiliser cette requête:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
à la référence et using System.Linq;
à l'utilisation de la classe
DataTable.Select
syntaxe est limitée alors que LINQ peut utiliser le framework .NET complet ou des méthodes personnalisées. Donc, seulement si vous êtes bloqué sur .NET 2, vous devriez utiliser DataTable.Select
, sinon je préférerais toujours LINQ
tbl.Select()
est considérablement plus rapide que les autres approches.
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
ajoutez à votre clause using:
using System.Linq;
et ajouter :
System.Data.DataSetExtensions
aux références.
Vous devriez pouvoir utiliser la méthode DataTable.Select () . Vous pouvez nous le faire comme ça.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
La fonction Select () renvoie un tableau de DataRows pour les résultats correspondant à l'instruction where.
vous pouvez définir la base de données comme IEnumberable et utiliser linq pour vérifier si les valeurs existent. consultez ce lien
Requête LINQ sur Datatable pour vérifier si l'enregistrement existe
l'exemple donné est
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
vous pouvez compléter où avec n'importe quel
table.Any(t => t.Author == author);