Quiconque s'occupait de commenter si nous devrions utiliser "I" ou "II" et "&" et "&&" dans notre Linq où () extensions / requêtes? Toute différence avec Linq à SQL? L'arbre d'expression résultant est plus que ce que je peux obtenir mon cerveau un vendredi après-midi
merci, p>
4 Réponses :
vous voulez Eh bien, le tuyau unique ( OK; Bitwise peut avoir été trompeur; Mais || et && reste le moyen le plus logique et prévu d'exprimer votre intention. Mes excuses pour toute confusion. P> || code> / && code>. p>
| code> / & code>) est généralement utilisé pour les arithmétiques biteux et (entre autres problèmes) peut rendre la base de code plus difficile à comprendre; Ça va Travail em> dans Linq-to-Objects (car le bitwise est toujours défini em> pour bool code>), mais sans le court-circuit habituel. Mais si votre source de données est une base de données (c'est-à-dire un analyseur d'expression dans le mélange), vous pouvez le trouver exploser sur vous. P>
| code> N'est pas unitaire pour BOOL code> S, il ne s'agit que de court-circuit. Cela dit, SQL garantit-il même que et code> et ou code> court-circuit? Si ce n'est pas le cas, alors je m'attendrais à | code> et || code> pour traduire vers ou code> dans tous les cas.
Ok Pavel, Marc, qui est-ce? Autre que le code du gars que j'examine, je n'ai jamais vu des versions simples d'une seule personne.
| / & ne sont pas "Bitwise", ils ne sont que des bits pour des types intégrés et Bool. Ils sont logiques pour tout le reste.
Fondamentalement, si vous avez affaire à des expressions booléennes, utilisez simplement && code> et || code>. Ils font ce que vous vous attendez normalement à ce qu'ils fassent, et ils travaillent certainement avec Linq à SQL.
C'est pareil dans votre exemple. Le | L'opérateur est surchargé pour le type bool et est identique à celui de || p>
http://msdn.microsoft.com/en-us/library /kxszd0kx.aspx p>
Je préfère utiliser || Parce que les gens y sont habitués et que cela se sent plus naturel pour la plupart des développeurs. P>
Ce n'est pas la même chose - | code> sur booléens n'est pas court-circuit (c'est-à-dire qu'il évalue toujours le côté droit), tandis que || code> est. La question ici est de savoir si cela compte dans le contexte LINQ du SQL.
Cela dépend vraiment de votre préférence. P>
En général, la plupart des développeurs s'entiennent à || et && pour tous les domaines logiques ou et et et surtout em> quand ils traitent d'un nombre de chiffres dans leur code, comme vous l'êtes. C'est parce qu'il est confusif visuellement envers les autres développeurs. P>
Alors, mon avis em> est de coller à || et && pour votre travail logique et utilisez uniquement | et et pour vos opérations bitwises. P>
Encore une fois, bien que ce soit juste la préférence. P>
Quicon soin de commenter si nous devrions utiliser
| code> ou|| code> et& code> ou&& code> Notre linq où () extensions / requêtes? P>Dans les expressions de Lambda (telles que celles fréquemment utilisées dans Linq), ces opérateurs agissent comme ils le font normalement en C #.
| code> et& code> sont des opérateurs logiques tandis que|| code> et&& code> sont des opérateurs logiques à court-circuit. Court-circuit est bon si vous voulez un code efficace. Le court-circuit est mauvais si vous voulez évitercode de ramification strong> (peut-être unittest avec une couverture à 100%). La plupart des gens utilisent le court-circuit tout le temps et la ramification ne les dérange pas parce qu'elles évitent d'utiliser des expressions qui ont des effets secondaires, ils ne subissent donc aucune conséquence maladie lorsque certaines des expressions ne sont pas évaluées. P> Voici Un exemple de branchement utile par court-circuit: p>
xxx pré> lorsque la base de donnéesAvaçable () est fausse, QueryDataandtherAreRésultats () ne sera pas évalué. P>
Toute différence avec Linq à SQL? P> BlockQuote>
Peu importe que vous utilisez pour Linq vers SQL. La ponctuation sera traduite dans les
et code> et code> etou code>. Une fois que la requête est envoyée à la base de données, l'optimiseur de plan de requête SQLServer déterminera s'il s'agit ou non de court-circuit. P> blockQuote>