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
?
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 En-têtes et si nous voulons trouver le cas échéant La valeur de la cellule
PEPSI
existe-t-elle dans des colonnes de lignes? Je peux tout boucler à découvrir mais y a-t-il un meilleur moyen? -
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
}
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 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 sur IEnumberable et utiliser linq pour vérifier si les valeurs existent . consultez ce lien
LINQ Query on Datatable pour vérifier si un enregistrement existe
l'exemple donné est
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
vous pouvez compléter où avec tout