2009-06-01 4 views

Répondre

3

Je ne sais pas pourquoi il a été omis, mais vous pouvez toujours le faire vous-même.

J'ai trouvé une réponse similaire à cette question sur MSDN, voici une implémentation basée sur ce code.

public static TElement SingleOrDefault<TElement> 
     (this IQueryable<TElement> query) 
{ 
    if (query.Count() == 1) 
     return query.First(); 
    else if (query.Count() == 0) 
     return null; 
    else 
     throw new InvalidOperationException(); 
} 


// Use it like this 

Product prod = (from p in db.Product 
       where p.ProductID == 711 
       select p).SingleOrDefault(); 

Source: MSDN

+0

Je ne vois pas le code fourni dans ce lien. L'implémentation que vous avez montrée ressemble exactement à FirstOrDefault() - au moins de ma mémoire. SingleOrDefault() retournera null s'il n'y a pas de résultats, retournera un seul résultat s'il en existe un seul, ou lèvera une exception s'il y a plus d'un résultat. –

+0

En réalité, SingleOrDefault se déclenche lorsqu'il y a plusieurs résultats trouvés. C'est le point de cela - zéro ou un enregistrement doit être retourné; sinon une erreur est survenue. De la docs: "cette méthode jette une exception s'il y a plus d'un élément dans la séquence." Votre version n'est pas correcte. – Will

+0

Mis à jour ma mise en œuvre, merci pour les commentaires. – KClough