première im un noob à Linq! Ensuite, la chose est que j'ai une collection qui:
Je voulais utiliser où mais je n'aime pas le si code> instructions que je dois faire ... Voici mon code: P> if (MyCollection.Any(rm => rm.BaseName == rbName))
{
var tmp = MyCollection.First(rm => rm.BaseName == rbName);
}
7 Réponses :
Utilisez SingleFault . Cela retournera l'élément unique s'il existe, null si elle n'existe pas ou si elle jettera et excepte s'il y en a plus d'un. P> propriété unique Réponse forte> (il n'y aura jamais de plusieurs instances) p> Si votre système est configuré de sorte que basename code> est une entité unique, utilisateur sRevarefault code> , cela ne jettera pas une exception s'il y a plusieurs car cela s'arrêtera à la première instance, mais le système sera conçu de manière à ce qu'il n'y aura jamais le même exemple, il serait donc acceptable (et la réduction du temps). P > var tmp = MyCollection.FirstOrDefault(rm => rm.BaseName == rbName);
C'est vraiment sympa! La manipulation des exceptions est très gentille :)
C'est bien de manière à ce que s'il y ait jamais une correspondance, il lancera une exception, mais si votre système est configuré qu'il n'est pas possible pour un duplicata, l'exception ne sera jamais requise puis aller avec FirstArdefault (uniquement si c'est un primaire. clé ou a défini la validation lors de l'insertion).
var tmp = MyCollection.FirstOrDefault(rm => rm.BaseName == rbName)); Here tmp will be null if you don't have such record.
tout code> renvoie bool code> Pour indique si ces éléments sont existants, premier code> renvoie l'enregistrement de votre collection. Donc, dans tout cas, vous aurez un objet de la collecte et du résultat de votre condition. Vous pouvez utiliser sridreDefault code>, puis vérifier "code> null code> votre valeur renvoyée. var tmp = MyCollection.FirstOrDefault(rm => rm.BaseName == rbName);
if (tmp != null)
{
// do something
}
Vous pouvez utiliser, ou p>
var tmp = MyCollection.FirstOrDefault(rm => rm.BaseName == rbName);
if (tmp != null)
{
// Do something
}
Comme le dit lapuissance, vous devez utiliser S'il y a plusieurs correspondances, afin que vous puissiez utiliser: p> SingleEfault code> ou peut-être FirstArdefault code> . S'il n'y a vraiment qu'une telle entrée, ils feront la même chose, mais FirstArdefault CODE> peut bien être plus rapide si vous utilisez LINQ vers des objets - SingleEfault code> devrait numériser à travers la séquence complète pour vérifier qu'il n'y a pas d'autres correspondances. SingleFault code> lancera une exception; firstordefault code> retournera simplement la première correspondance. p> var result = MyCollection.FirstOrDefault(rm => rm.BaseName == rbName);
if (result != null)
{
// Use it
}
Bon point Jon. C'est délicat de voir s'il s'agissait d'un élément clé principal ou défini de manière unique, une grande addition néanmoins.
Vous devriez vérifier
firstordfault code>Pourquoi n'utilisez-vous pas FirstOrdefault () et après la requête que vous vérifiez si votre résultat est NULL ou contient vos données?
Je ne connaissais pas cette méthode :( Je préfère Simordefault quand même!