LINQ-COUNT über mehrere Spalten
Wenn ich eine Tabelle mit einer Spalte Titel und 3 bit-Spalten (f1, f2, f3) , enthält entweder 1 oder NULL, wie würde ich schreiben, die LINQ-zur Rückgabe der Titel mit der Anzahl der einzelnen bit-Spalte, die enthält 1? Ich bin auf der Suche nach dem äquivalent zu der SQL-Abfrage:
SELECT title, COUNT(f1), COUNT(f2), COUNT(f3) FROM myTable GROUP BY title
Ich bin auf der Suche nach dem "besten" Weg, es zu tun. Die version, die ich kam mit dips in der Tabelle 4-mal, wenn man sich die zugrunde liegenden SQL, so ist es zu langsam.
InformationsquelleAutor gfrizzle | 2009-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, zu bleiben, um eine LINQ-Abfrage, und verwenden Sie einen anonymen Typ, die Abfrage könnte wie folgt Aussehen:
Der trick ist zu erkennen, dass Sie wollen, um die Anzahl der echten Felder (es wird abgebildet als ein nullable bool), die Sie tun können, mit der Count-operator und ein Prädikat. Mehr info auf der LINQ-Gruppe Betreiber hier: Die Standard-LINQ-Operatoren
InformationsquelleAutor OdeToCode
Ich denke, das ist, wo LINQ fällt. Wenn Sie möchten, eine effiziente Nutzung der SQL, wenn Sie wollen nette-code, Verwendung von LINQ.
Konnte man immer ausführen, die Abfrage direkt, da Sie wissen, die SQL bereits.
InformationsquelleAutor Cameron MacFarland
Hier ist die Lösung, die ich kam mit. Beachten Sie, dass es in der Nähe der Vorschlag von @OdeToCode (aber in VB-syntax), mit einem wichtigen Unterschied:
Ersten Abfrage keine Gruppierung, aber die ToList bekommt die gruppierten Daten ist der server. Die Beseitigung der Zählung hier hält die resultierende SQL-Anweisung aus der Produktion von sub-SELECTs für jede Zählung. Ich glaube die zählen in der zweiten Abfrage lokal.
Funktioniert dies, da ich weiß, dass die erste Abfrage gibt eine überschaubare Anzahl von Zeilen. Wenn es waren wieder Millionen von Zeilen, würde ich wahrscheinlich in eine andere Richtung gehen.
InformationsquelleAutor gfrizzle