LINQ nouvelle instance lorsque SingleOrDefault retourne null
Une autre question rapide.
J'ai cette méthode simple:
#region Fields
private Collection<Address> _addresses;
#endregion
#region Public methods
public Address DeliveryAddress()
{
if (_addresses == null)
if (this.Id > 0)
_addresses = Core.Data.Addresses.GetClient(this.Id);
return _addresses.SingleOrDefault(x => x.TypeId == AddressType.Delivery);
}
public Address InvoiceAddress()
{
if (_addresses == null)
if (this.Id > 0)
_addresses = Core.Data.Addresses.GetClient(this.Id);
return _addresses.SingleOrDefault(x => x.TypeId == AddressType.Invoice);
}
#endregion
Comme vous pouvez le voir j'ai essayer de retourner un résultat pour un DeliveryAddress
et un résultat pour un InvoiceAddress
. Mon problème est que je voudrais que le lien de l'expression de créer une nouvelle instance de Address()
si SingleOrDefault
retourne null
.
Je suis vraiment linq, donc je ne suis pas sûr de savoir si SingleOrDefault
est l'expression correcte, je devrais être en utilisant.
Voir: stackoverflow.com/questions/11594355/...
Vous voudrez peut-être regarder dans le
Vous voudrez peut-être regarder dans le
.Any()
fonction.OriginalL'auteur r3plica | 2012-12-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
DefaultIfEmpty
et utiliser cette instance en tant que valeur par défaut:Single
au lieu deSingleOrDefault
Oui, ce serait moins à confusion.
bonne idée 🙂
excellent, juste ce que je cherchais
OriginalL'auteur Rango
Utiliser le null-coalescence de l'opérateur:
L'expression
rendements
x
six
n'est pasnull
, sinony
. Vous pouvez la chaîne de l'opérateurCe renvoie la première valeur non nulle ou
null
si tous sontnull
.Mise à JOUR
Noter que
SingleOrDefault
déclenche une exception si la séquence a plus d'un élément. Si vous avez besoin de le premier élément d'une séquence ayant pas ou plus d'un élément, utilisezFirstOrDefault
à la place.OriginalL'auteur Olivier Jacot-Descombes
Vous pouvez créer votre propre méthode d'extension, comme ceci:
... puis tack une utilisation sur la fin de SingleOrDefault:
... ou parce que la logique est donc simple, il suffit de l'inclure comme d'autres réponses ont dit.
OriginalL'auteur KeithS
Au lieu de
Faire quelque chose comme ceci:
OriginalL'auteur Rui Jarimba
Je serais enclin à écrire à la fois de ces que les méthodes d'extension sur
IEnumerable<Address>
. Vous pouvez utiliser la valeur null-coalesing opérateur de renvoyer une nouvelle instance, si leSingleOrDefault()
appel renvoienull
.OriginalL'auteur Russ Cam
Solutions alternatives dans d'autres réponses, vous pouvez également créer votre propre
SingleOrNew
méthode d'Extension.Il peut être utilisé comme
OriginalL'auteur Tilak