Linq-to-Sql Zählen
Ich tun müssen, um die Anzahl der Elemente in einem verknüpften Ergebnis festlegen, in denen eine Bedingung wahr ist. Ich habe somit eine "aus beitreten, wo, wo" Art des Ausdrucks. Dieser Ausdruck muss mit einer select-oder groupby. Ich brauche nicht die Spalte, die die Daten tatsächlich und Abbildung es ist also schneller, nicht, um es zu markieren:
count = (from e in dc.entries select new {}).Count();
Ich habe 2 Fragen:
- Gibt es einen schnelleren Weg, dies zu tun in Bezug auf die db laden?
- Ich doppelte meine komplette Kopie der Abfrage. Gibt es eine Möglichkeit, die Struktur meiner Abfrage wo ich es einen Platz für beide zählt und für immer sagen, eine Liste mit allen Feldern?
Dank.
Bitte Besondere Aufmerksamkeit:
- Die Abfrage ist eine Verknüpfung und nicht um eine einfache Tabelle, so muss ich verwenden eine select-Anweisung.
- Ich brauche 2 unterschiedliche Abfrage Körper, da Brauch ich nicht zum laden der eigentlichen Felder für die Zählung wird aber für die Liste.
Ich gehe davon aus, wenn ich die select-Abfrage, die es füllt sich mit Daten, wenn ich mit der Abfrage.Graf vs-Tabelle.Zählen. Freue mich auf diejenigen, die verstehen, was ich Fragen, für eine mögliche bessere Wege, dies zu tun und einige detaillierte Kenntnisse über das, was tatsächlich passiert. Ich brauche, um zu ziehen aus der Protokollierung ein Blick in das tiefere.
- Sie können den code vereinfachen, um
count = dc.entries.Count();
- Siehe meine obigen. Es ist nicht eine Tabelle, sondern eine Abfrage, die eine Verknüpfung enthält.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Queryable.Zählen
In der Tat, wenn Sie mit LinqToSql oder LinqToEntities,
Queryable.Count()
ist geschickt in die Datenbank. Keine Spalten in den Speicher geladen. Überprüfen Sie den generierten sql-Code zu bestätigen.Dies ist nicht wahr. Überprüfen Sie den generierten sql-Code zu bestätigen.
Wenn Sie müssen sowohl die Anzahl und die Liste, die Liste und zählen Sie es.
Wenn Sie die Zählung manchmal und zu anderen Zeiten müssen Sie auf der Liste... schreiben Sie eine Methode, die zurückgibt, die komplexe IQueryable, und manchmal nennen .Count() und zu anderen Zeiten anrufen .ToList();
Dies ist grundsätzlich falsch, die in Ihrem Szenario. Es kann wahr sein, in einem Szenario, in dem ein index umfasst die Ergebnis-Spalten, aber Sie haben keine Ergebnis-Spalten.
In Ihrem Szenario, was auch immer index gewählt wird, der von der Abfrage-Optimierer diesen index kann benutzt werden, um die Zählung.
Fazit: Query-optimizer führt die Optimierung, die Sie wünschen.