Le query del database restituiscono risultato set . Un set vuoto è una risposta ragionevole; significa che non hai nessuna delle cose cercate.
Direi che il tuo codice sta andando molto in canonicalizzazione del risultato.
Il tuo codice (da qualche parte poco dopo questa riga) sta andando a verificare se l'applicazione che hai appena cercato esiste o no, quindi non stai impedendo la successiva logica condizionale (non mostrata nella tua domanda) nel tuo codice facendo %codice%.
Puoi - e io sostengo dovrebbe - invece: controlla il set vuoto (ad esempio, utilizza la dimensione del set di risultati, magari con .FirstOrDefault()
) per vedere se l'applicazione esiste. Questo è sostanzialmente più pulito rispetto alla conversione del set vuoto su default e poi prendendo il primo e infine verificando che null per vedere se l'applicazione di interesse esiste.
Piuttosto che andare così lontano:
application = CreditDatabase
.Applications
.Select(Mapper.Map<Application>)
.Where(c => c.uID == urID)
.DefaultIfEmpty().First();
if ( application == null ) {
// handle missing application, maybe add it...
} else {
// use the found application
}
Ometti la gestione predefinita; invece:
search = CreditDatabase
.Applications
.Select(Mapper.Map<Application>)
.Where(c => c.uID == urID);
if ( ! search.Any () ) {
// handle missing application, maybe add it...
} else {
application = search.Single ();
// use the found application
}
Addendum: in .Any()
sopra, ho usato application = search.Single ()
invece di .Single()
poiché eccetto se il set di risultati non vuoto ha più di una corrispondenza ha senso qui: è una ricerca di cosa presumiamo che esista una corrispondenza esatta con la chiave primaria univoca (altrimenti, come sottolinea @JacquesB, poiché la query non è ordinata, non sappiamo davvero cosa stiamo mantenendo e cosa stiamo eliminando con .First()
).