verwendetes Datenbanksystem: SqlCe Compact 3.5
Hi,
ich hab ein DataSet ds mit nem Table dt.
In dt befindet sich (unter anderem) die Spalte nation, die je nach Datensatz "GER", "ENG", "USA" etc. enthält.
Ich will nun die Datensätze so selektieren, dass ich für jedes Land einen Bericht erstellen kann.
Mit
DataRow[] nations = dt.Select("nation = 'GER'");
klappt das schon mal einwandfrei, aber halt nur für ein Land.
Ich suche also nach einer Variablen, die mir alle Länder einliest, also z.B. ein List<>, welches ich dann abarbeiten kann - nur wie?
Ich hab schon alles mögliche gegoogelt und auch schon in div. Foren nachgeschaut, konnte aber nichts brauchbares finden (vielleicht ja auch nur blind...).
Ich habe Dich so verstanden, dass Du von Deinem DataSet erst einmal wissen möchtest welche verschiedenen Länder gibt es. Das kann man mit SQL so machen:
SELECT Personen.Land
FROM Personen
GROUP BY Personen.Land;
und für C# gibt es hier ein Beispiel:
Group Klausel
Ich befürchte nur, dass Dir einer der Moderatoren eine 1.1.1. Exception werfen wird. Viel Glück
Danke für den Tipp, scheint wohl das zu sein, was ich gesucht habe.
Allerdings bringt er mir folgende Fehlermeldung:
DataSet ds = new DataSet();
adp.Fill(ds);
DataTable dt = ds.Tables["Table"];
var nationNames =
from n in dt
group n by n.nation.Last() into g
orderby g.Key
select g;
Es konnte keine Implementierung des Abfragemusters für den Quelltyp "System.Data.DataTable" gefunden werden. "GroupBy" wurde nicht gefunden.
Du brauchst noch .AsEnumerable().
Das wird so nichts, weil Du einfach eines der Beispiele kopiert hast ohne es nachvollzogen zu haben. In dem Beispiel werden Studenten mit gleichem Nachnamen gruppiert. Davon finden sich noch Fragmente in deinem Code... 🙁
Nicht nur das, es ist selten sinnvoll die Arbeit der Datenbank dadurch zu ersetzen indem man die gesamte Tabelle in eine DataTable liest und dann von Hand verarbeitet.
Ich kann das gut nachvollziehen, man programmiert ein bisschen C#, dann braucht man eine Datenbank und plötzlich steht man vor SQL Queries, SqlCeDataAdapter, DataTable, DataSet, Linq und sieht den Wald vor lauter Bäumen nicht.
Hier noch eine sehr schöne Ressource www.db-class.org Zum Hintergrund: Stanford hat im letzten Jahr diverse Vorlesungen online gehalten. Darunter dieser Datenbankkurs - ist m.E. sehenswert wenn man selbst noch keine derartige Veranstaltung besucht hat.
Nochmals vielen Dank.
Sehr nützlich www.db-class.org.
Gelöst habe ich es mit ner SQL Abfrage, naja eigentlich 2.
SELECT nation FROM Orders GROUP BY nation
Schreibt nur die einzelnen Länder in dtNation
SELECT * FROM Orders WHERE nation = '" + dtNation.Rows[0][0] + "'
Schreibt die Daten pro Land.
Kann man bestimmt noch eleganter machen, aber es funzt.
Sieht soweit gut aus.
Tipp: Schau dir mal den StringBuilder an, dann kannst Du die die Literal Concatenation (+) sparen.
Tipp: Schau dir mal den StringBuilder an, dann kannst Du die die Literal Concatenation (+) sparen.
Dann von mir der Verweis auf: [Artikelserie] SQL: Parameter von Befehlen