LINQ-Abfrage mit SELECT und zwei GROUP-BY-Bedingung
Was ist das äquivalent von LINQ-Anweisung für eine Datatable
von der folgenden SQL-Abfrage:
SELECT code_direction, count(TP) AS CN
FROM table1
WHERE cod_time = 'A011'
GROUP BY TP,code_direction;
sind und wie man das Ergebnis in eine neue datatable?
Habe ich versucht, es zu konvertieren, aber ich dort sind einige Fehler. Könnte jemand einen Blick auf diese:
var query = from t in table1.AsEnumerable()
group t by new { t.TP, t.code_direction }
into grp
select new
{
grp.Key.code_direction,
CN = grp.Count(t.TP)
};
foreach (var x in query)
{
Console.Write(x.code_direction);
Console.Write(x.CN);
}
BTW, warum willst du das Ergebnis in einer DataTable?
Muss ich auf Zyklus-das Ergebnis, so denke ich verschieben des Ergebnisses, um eine neue datatable und interagieren, um es
Warum nicht gehen Sie gerade aus durch die Ergebnisse, und überspringen Sie die datatable-Teil?
Was meinst du denn mit "Zyklus"? DataTable ist die ältere Technologie. Es scheint unwahrscheinlich, dass Sie brauchen, um es zu benutzen.
Bei StackOverflow, wenn Sie sagen, "einige Fehler" es gibt immer jemanden, der geht: welche Fehler? Ich denke, es ist einfach passiert.
Muss ich auf Zyklus-das Ergebnis, so denke ich verschieben des Ergebnisses, um eine neue datatable und interagieren, um es
Warum nicht gehen Sie gerade aus durch die Ergebnisse, und überspringen Sie die datatable-Teil?
Was meinst du denn mit "Zyklus"? DataTable ist die ältere Technologie. Es scheint unwahrscheinlich, dass Sie brauchen, um es zu benutzen.
Bei StackOverflow, wenn Sie sagen, "einige Fehler" es gibt immer jemanden, der geht: welche Fehler? Ich denke, es ist einfach passiert.
InformationsquelleAutor Alessandro | 2011-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit die erste Frage geht. Die LINQ-entspricht der SQL-query ist:
Beachten Sie, dass Sie nicht haben, um eine Argumentation zu
grp.Count()
. (Für die offensichtliche Grund, dass in SQL COUNT(TP) ist die gleiche wie COUNT(*), d.h. nur die Anzahl der Zeilen. Die Geschichte wäre anders, wenn Sie möchten, verwenden Sie COUNT(DISTINCT TP) oder so ähnlich.)Soweit die zweite Frage geht, ob Ihre Frage nur zurückgegeben
IEnumerable<T>
wobei TDataRow
(d.h. eine Abfrage, wietable1.AsEnumerable().Where(r => r.cod_time == "A011")
) dann könnten Sie einfach dieDataTableExtensions.CopyToDataTable
- Erweiterung-Methode. Als Ihre Abfrage ein anonymer Typ allerdings, den Sie haben, befolgen Sie diese Anweisungen finden Sie auf MSDN.InformationsquelleAutor afrischke
Habe ich mit LINQ zu arbeiten, auf ein JSON-Objekt zurückgegeben, die von einem remote-sharepoint-Webdienst. Ich habe dies geschrieben, weil die meisten der Antworten, die ich online gefunden haben, waren ein bisschen anders aus, was ich brauchte.
eine json Liste der täglichen Aktivitäten ist zurück von einer entfernten sharepoint-Liste & dann zusammengefasst mit LINQ
Die vereinfachte version eines custom-Objekt-definition ist im folgenden dargestellt( &, die definiert ist, in die Modelle Bereich einer MVC-Anwendung)
Den serialisierten JSON-Objekt in einen MyCustomObjectList array.
Wollte ich ausrechnen, wie viele Aktionen jeder Art geschah an einem bestimmten Tag. NB eventdate gespeichert ist, als einen string im format yyyy-mm-dd hh:MM:ss. Dies war eine Vereinfachung Konvertierungen zwischen c#, JSON & Jquery ( wo erforderlich ich erstellen DateTime-Objekte an anderer Stelle im code mit dem
eventdate.
Einige werden argumentieren, das ineffizient ist, aber ich bevorzuge die split-Prozesse in einer sequentiellen Reihe von wirklich einfache Operationen, für die Sache leichter Debuggen & anderen Menschen zu helfen, Folgen Sie meinem code. Das ist, warum gibt es 2 Linq-Abfragen .
querya Streifen aus der Zeit-Komponente aus dem eventdate " Dies sichert uns später Gruppierung geschieht durch Tag & nicht durch die zweite. Werden doppelt sicher, dass es keine Zwischenspeicherung ich es schaffen, in ein neues Feld namens actionday. Ich auch umbenennen, Aktion, Tätigkeit, weil intellisense war immer verwirrt!! Die anderen Spalten kopieren.
/* queryb produziert eine gruppierte Anzahl der querya, gruppiert nach actionday & Tätigkeit, erstellen Sie neue Spalten actionkey,ActionCount,Tee,Aktion & DetailList ( das ist eine Zusammenfassung für debugging-Zwecke)
*/
Hier ist eine version, die sumarises 3 Spalten
InformationsquelleAutor RichardScannell