Vérifier si la valeur existe dans dataTable?
j'ai DataTable avec deux colonnes auteur et Bookname .
je veux vérifier si la valeur de chaîne de caractères auteur existe déjà dans le DataTable. Est-il une méthode intégrée pour le vérifier, comme pour les Tableaux array.contains
?
5 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 faire si nous ne connaissons pas les en-têtes des colonnes et nous voulons trouver s'il y a la valeur de la cellule
PEPSI
existent dans toutes les lignes'c colonnes? Je peux boucle tout savoir mais est-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"));
vous pouvez utiliser Linq. Quelque chose comme:
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
}
ajouter à votre clause d'utilisation:
using System.Linq;
et ajouter:
Système.Données.Extensions des données
aux références.
vous devriez pouvoir utiliser le DataTable.Sélectionnez la méthode () . Vous pouvez nous comme ça.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
la fonction Select() retourne un tableau de valeurs 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 pourriez compléter où avec n'importe quel