Pour obtenir une liste d'enregistrements, je fais normalement quelque chose dans le sens de: pour obtenir un seul disque, quand je sais que j'utilise le PK pour la récupérer, j'utilise quelque chose Comme: p> Maintenant, à l'aide de l'approche d'enregistrement unique, si la PK est une valeur défectueuse (comme elle est à condition de tester) la 2ème ligne jette une erreur. P > Quelle est la
4 Réponses :
Utiliser Au fait, des requêtes comme celle-ci sont généralement plus lisibles (imo) sans em> à l'aide d'une expression de requête, donc vous pourriez avoir quelque chose Comme: p> Les expressions de requête sont excellentes lorsque vous utilisez plusieurs opérateurs ou faire des choses relativement complexes telles que des jointures - mais si vous avez juste em> Vous avez un SIMOREFAULT code> si vous attendez 0 ou 1, ou sReveArdefault code> si vous avez juste besoin du premier enregistrement de potentiel, mais peut faire face à 0. Les deux renvoient les deux valeur par défaut pour le type (généralement NULL) s'il n'y a aucun résultat. où code> clause ou juste em> a eu une projection, cette "notation de points" est plus simple imo. Cela fonctionne également mieux lorsque vous devez appeler une méthode comme firstordfault code> à la fin. P> p>
Merci pour le commentaire supplémentaire sur les expressions de requête. Encore beaucoup d'apprentissage sur EF et mon esprit n'enveloppe pas entièrement autour de la syntaxe Lambda. Me rappelle beaucoup d'anciens pointeurs de mémoire C. ;)
SingleFault CODE> est pris en charge dans EF 4, mais pas dans ef 1. FirstArdefault code> est pris en charge dans les deux.
@Jon Skeet - Quelle est la différence entre placer les mots de commande sur la chaîne LINQ ... ex. _db.mymodels.where (a => a.prop == "valeur"). Seuletfault (); code> contre _db.mymodels.singleordefault (). Où (A => A.Prop == "valeur"); code> - représentations? Ordre d'excence? etc...
@ one.beat.Consumer: la seconde ne compilera même pas (en général), car SmoorFault renvoie une valeur unique, pas une séquence. Mais si a fait i> compiler, cela ne ferait pas ce que vous vouliez. Il vérifierait qu'il n'y a qu'une seule valeur dans toute la table MyModels i>, puis appliquez le filtre à celui-ci.
@Jonskeet j'ai réalisé que juste après que je l'ai tapé. Comment diriez-vous: _db.models.select (modèle => Nouvelle viewModel {Prop = Model.Prop}). Tolist (). Où (ViewModel => ViewModel.Prop = "Valeur"); Code> Versus _db.models.select (modèle => Nouvelle viewModel {Prop = Model.Prop}). Où (ViewModel => ViewModel.Prop = "Valeur"). Toliste (); Code> - Quels sont les implications de ces différents? des différences de performance? activité de la base de données? problèmes de coulée? juste curieux
@ one.beat.Consumer: appeler tolist code> forcera tous les résultats à revenir au client, à quel point linq aux objets prendront le dessus ... vs exécution de la requête dans la base de données, qui est évidemment plus efficace.
Merçi pour la confirmation. À
Notez que Il y a Si vous avez juste besoin de vérifier l'existence d'un enregistrement, vous pouvez également utiliser SingleFault () Code> a > et sRevarArdefault () code> ne permettra pas Vous devez spécifier la valeur par défaut. P>
faitFempty () code> , Ce qui vous permet de spécifier la valeur par défaut que vous souhaitez renvoyer s'il n'y a pas d'éléments dans l'énumérable. Vous pouvez combiner celui-ci avec premier () code> (comme dans defaulfempty (). Premier () code>) pour atteindre sReveReDefault () code> une Lambda pour envelopper la création d'une nouvelle instance et l'ajouter à l'ensemble. P>
tout () code> . Cependant, cela entraînera deux questions, si vous devez traiter le dossier s'il existe. P>
Tout () est le meilleur moyen d'aller si vous avez juste besoin de vérifier l'existence.
DefaultIfrempty code>, comme SIMOREFAULT code>, est pris en charge dans EF 4 mais pas EF 1.
Je sais que cela a 8 ans maintenant, mais aucune chance d'un exemple?
@Cloud Désolé, je n'ai touché aucune technologie Microsoft au cours des sept dernières années environ, alors ...: - /
Si (votre DataTable.ca ()) {} de (votre DataTable.ca (x => x.field == true || x.therfield == "test") {} @cloud est cet exemple que vous vouliez?
var efCompany = _dbRiv.Company
.SingleOrDefault(a => a.CompanyId == companyFeedInfo.CompanyId);
if (efCompany != null)
{
// Use it
}
else
{
// Report to user, or whatever
}
Vous pouvez également utiliser
_dbRiv.Company.FirstOrDefault(x => x.Id == #id);
Je suppose que s'il y a un indice, il n'aurait pas besoin de numériser toute la table.