web-dev-qa-db-fra.com

LINQ SELECT FIRST ROW

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;
}
16
RBC

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
}
39
Michael La Voie

.First () prendra seulement le premier ou .Single () prendra le premier et levera une exception s'il y a plus

4
Omu

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.

3
How Lun

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.

0
Tarik