Comment sélectionner la première ligne d'une instruction linq select sans utiliser foreach?
J'utilise foreach et puis casser; mais cela doit être un meilleur moyen?
J'aime avoir la valeur en première ligne; De plus, vérifiez si aucune ligne n'est trouvée. Mon problème est d'obtenir la valeur sans instruction foreach.
Ce que je fais est de trouver une valeur dans mon DataTable et je sais que la ligne est uniqe; alors j'aime bien faire un select et obtenir la valeur; plus faire une vérification s'il n'y a pas de succès pour être sûr ... :)
C'est le code que j'utilise maintenant, voir ci-dessous
Merci, Rune
var var_QUERY_linq =
from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable()
where vm_TABLE_PK.Field<Int32>( "MyField_Int32" ) == vmp_ROW_Counter_Int32
select vm_TABLE_PK;
foreach ( DataRow o_DataRow in var_QUERY_linq )
{
vmp_Return_string = o_DataRow.Field<string>( "Myfield_nvarchar" );
break;
}
Il suffit d'utiliser .FirstOrDefault ()
var var_QUERY_linq = (
from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable()
where vm_TABLE_PK.Field<Int32>( "MyField_Int32" ) == vmp_ROW_Counter_Int32
select vm_TABLE_PK).FirstOrDefault();
if(var_QUERY_linq != null)
{
//There is a record
}
.First () prendra seulement le premier ou .Single () prendra le premier et levera une exception s'il y a plus
J'ai rencontré un problème lié à l'ordre de l'élément (OrderBy) lorsque j'ai utilisé FirstOrDefault pour rechercher le premier élément de la liste.
Je vous suggère d'utiliser TAKE pour obtenir le premier élément:
var_QUERY_linq.Take(1).FirstOrDefault()
* Toujours utiliser sql profiler si possible pour vérifier la requête envoyée au serveur SQL.
Je suppose que MyField est le champ sur lequel vous souhaitez obtenir une valeur.
var result = vm_Table_Pk.DefaultIfEmpty().First().MyField;
Vous pouvez également définir le résultat par défaut autre que NULL. Comme :
var result = vm_Table_Pk.DefaultIfEmpty("Missing").First().MyField;
Et ne vous inquiétez pas, Intellisense vous aidera dans cette voie.