2009-12-18 5 views

Répondre

5
var myLinqObj = db.MyObjects.Take(1).SingleOrDefault(); 
2

Vous pouvez simplement utiliser .Premier() ou .FirstOrDefault() comme ceci:

Foo foo = query.Select(a => a.Name == "foo").FirstOrDefault(); 
+1

Si la requête "** ne devrait renvoyer qu'un seul résultat" Single est plus efficace car il renvoie si la requête renvoie plus d'un bogue. –

+0

@Martinho Fernandes Vous avez raison, je n'avais jamais utilisé Single –

18
// Will return a default value if no object is found in the DB 
db.Table.SingleOrDefault(x => x.something == someParameter); 

ou

// Will throw an exception if records are not found 
db.Table.Single(x => x.something == someParameter); 

Merci à Mehrdad pour le commentaire ... les deux lignes ont été mis à jour.

S'il est possible que votre requête aboutisse à plusieurs enregistrements renvoyés, alors (comme mentionné dans les commentaires) Single() et SingleOrDefault() sont les mauvaises méthodes à appeler. Vous garderiez la même syntaxe, mais appelez First() et FirstOrDefault() respectivement.

+3

Vous pouvez remplacer '.Where (prédicat) .Single()' par '.Single (prédicat)'. –

+1

Single() lèvera une exception si plus d'un élément existe dans la séquence. Si vous ne voulez pas lancer une exception, vous pouvez aussi utiliser First() ou FirstOrDefault(). – LBushkin

+0

@Mehrdad - J'ai fait le changement, mais y a-t-il une différence de performance entre les deux? Je préfère habituellement. Où (prédicat) .Single() parce que je pense qu'il exprime mon intention un peu plus clair. –

5

Vous pouvez utiliser First ou Single.

First renvoie la première ligne, qu'il y ait plusieurs lignes ou seulement une ligne.

Single s'attend à ce qu'une seule ligne soit renvoyée et déclenche une exception s'il existe plusieurs lignes.

Single est donc potentiellement un meilleur choix si vous prévoyez d'avoir seulement une ligne, de sorte que vous verrez le problème immédiatement et pouvez le résoudre.

0

De tous les ont dit mon ajout est l'utilisation de la propriété Value après avoir un seul élément si vous utilisez LINQ-to-XML.

Et le Select new { *cols* } s'il s'agit d'une liste, d'un tableau ou d'une table. Exemple. ... sélectionnez nouveau {c.Name, c.Value};

Cette astuce est pour vous permettre d'obtenir les valeurs.