Sollte ich beim Schreiben einer LINQ-Abfrage mit mehreren "und" -Bedingungen eine einzelne where
Klausel &&
oder mehrere where
Klauseln schreiben , eine für jede Bedingung?
static void Main(string[] args)
{
var ints = new List<int>(Enumerable.Range(-10, 20));
var positiveEvensA = from i in ints
where (i > 0) && ((i % 2) == 0)
select i;
var positiveEvensB = from i in ints
where i > 0
where (i % 2) == 0
select i;
System.Diagnostics.Debug.Assert(positiveEvensA.Count() ==
positiveEvensB.Count());
}
Gibt es einen anderen Unterschied als die persönlichen Vorlieben oder den Codierungsstil (lange Zeilen, Lesbarkeit usw.) zwischen positiveEvensA und positiveEvensB ?
Ein möglicher Unterschied besteht darin, dass verschiedene LINQ-Anbieter möglicherweise besser mit mehreren where
s umgehen können als mit einem komplexeren Ausdruck. Ist das wahr?
Where
gibt einige spezielle Optimierungen für den Fall der multiplen where-Klausel. Trotzdem wird es aufgrund der Aufrufe mehrerer Delegierter langsamer.Dies ist meistens ein persönliches Stilproblem. Persönlich
where
gruppiere ich die Klauseln , solange die Klausel in eine Zeile passt.Die Verwendung mehrerer
where
s ist in der Regel weniger leistungsfähig, da für jedes Element, das es so weit bringt, ein zusätzlicher Delegatenaufruf erforderlich ist. Es handelt sich jedoch wahrscheinlich um ein unbedeutendes Problem, das nur berücksichtigt werden sollte, wenn ein Profiler dies als Problem anzeigt.quelle
Das Leistungsproblem gilt nur für speicherbasierte Sammlungen ... Linq to SQL generiert Ausdrucksbäume, die die Ausführung verzögern. Weitere Details hier:
Mehrere WHERE-Klauseln mit LINQ-Erweiterungsmethoden
quelle
Wie andere vorgeschlagen haben, ist es eher eine persönliche Präferenz. Ich mag die Verwendung von &&, da es besser lesbar ist und die Syntax anderer Mainstream-Sprachen nachahmt.
quelle