6
votes

Linq où () tuyaux simples ou doubles / ampersands

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, xxx


0 commentaires

4 Réponses :


9
votes

vous voulez || / && .

Eh bien, le tuyau unique ( | / & ) 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 dans Linq-to-Objects (car le bitwise est toujours défini pour bool ), 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.


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.


4 commentaires

| N'est pas unitaire pour BOOL S, il ne s'agit que de court-circuit. Cela dit, SQL garantit-il même que et et ou court-circuit? Si ce n'est pas le cas, alors je m'attendrais à | et || pour traduire vers ou 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 && et || . Ils font ce que vous vous attendez normalement à ce qu'ils fassent, et ils travaillent certainement avec Linq à SQL.



1
votes

C'est pareil dans votre exemple. Le | L'opérateur est surchargé pour le type bool et est identique à celui de ||

http://msdn.microsoft.com/en-us/library /kxszd0kx.aspx

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.


1 commentaires

Ce n'est pas la même chose - | sur booléens n'est pas court-circuit (c'est-à-dire qu'il évalue toujours le côté droit), tandis que || est. La question ici est de savoir si cela compte dans le contexte LINQ du SQL.



0
votes

Cela dépend vraiment de votre préférence.

En général, la plupart des développeurs s'entiennent à || et && pour tous les domaines logiques ou et et et surtout 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.

Alors, mon avis est de coller à || et && pour votre travail logique et utilisez uniquement | et et pour vos opérations bitwises.

Encore une fois, bien que ce soit juste la préférence.


0 commentaires

4
votes

Quicon soin de commenter si nous devrions utiliser | ou || et & ou && Notre linq où () extensions / requêtes?

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 #. | et & sont des opérateurs logiques tandis que || et && 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 éviter code de ramification (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.

Voici Un exemple de branchement utile par court-circuit: xxx

lorsque la base de donnéesAvaçable () est fausse, QueryDataandtherAreRésultats () ne sera pas évalué.

Toute différence avec Linq à SQL?

Peu importe que vous utilisez pour Linq vers SQL. La ponctuation sera traduite dans les et et et ou . 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.


0 commentaires