La sélection DataRow à l'aide de Linq en c#
Comment puis-je faire cela à plus court à l'aide de Linq?
int id = 0;
foreach (DataRow dr in tableClientTableAdapter1.GetData())
{
if (dr[0].ToString() == txtClientName.Text)
{
id = Convert.ToInt16(dr[1]);
break;
}
}
J'ai essayé d'utiliser cette
var a = tableClientTableAdapter1.GetData().Cast<DataRow>().Where(cName => cName[0].ToString() == txtClientName.Text);
MessageBox.Show(a[1].ToString());
Mais j'ai eu cette erreur:
Erreur 1 Ne peut pas appliquer l'indexation avec [] pour une expression de type 'System.Les données.EnumerableRowCollection' C:\Users\[email protected]\Desktop[Final][GlobalTek] Système de Surveillance[GlobalTek] Système de Surveillance de la\xfrmProjectAwarding.cs 89 37 [GlobalTek] Système de Surveillance de la
Toute aide!!
Vous devez vous connecter pour publier un commentaire.
var a =
est un séquence de DataRow les articles que vous essayer de les traiter comme un seul objet. Si vous désirez un résultat, utilisez l'une dessur la requête, à la différence de vos attentes pour la suite. Si plus d'un élément peut être présent mais vous n'êtes intéressé que par le premier d'entre eux, aller avec
First()
. Si un seul élément devrait match et c'est une erreur s'il n'y sont plus, rendez-vous avecSingle()
. Si, dans les deux cas, il est possible d'avoir des pas correspond, utilisez le bon*OrDefault()
version.Essayez ceci:
Mais attention il va lever une exception si il n'y a pas de match. Si c'est une possibilité, vous devriez faire ceci:
Si vous allez utiliser le casting de la méthode, vous devez également utiliser la méthode de champ.
ToList() a été ajouté si vous souhaitez accéder, via l'indice de
Si vous avez besoin seulement le premier match, vous pouvez remplacer le cas avec la Première/FirstOrDefault selon la façon dont vous voulez null traitées