Ho trovato questa soluzione:
if (Take(2).Count() == 1)
c'è qualche altra soluzione per le prestazioni (o meglio zucchero sintattico) per fare questo controllo? Voglio un modo di performance perché questa sarà un'estensione usata su Linq To Entites e Linq to Objects.
Non sto utilizzando SingleOrDefault
perché questo genererà ed eccezione se ha più di 1 elemento.
In base alla risposta @Telastyn ho trovato il seguente:
public static bool HasOne<T>(this IEnumerable<T> enumerable) {
var enumerator = enumerable.GetEnumerator();
return enumerator.MoveNext() && !enumerator.MoveNext();
}
un'altra implementazione (leggermente più lenta ma sicura al 100% funzionerà efficacemente su Linq su Entità) sarebbe:
public static bool HasOne<T>(this IEnumerable<T> enumerable) {
return !enumerable.FirstOrDefault().Equals(default(T)) && !enumerable.Skip(1).Any();
}
Non sono sicuro che MoveNext
si lavori con IQueryable su Linq su Entites. (tutti gli acquirenti? Non so come testarlo)
Dopo alcuni test, Take(2).Count() == 1
; è il più veloce : S