DataTable: Bekommen Sie Max-Wert Mithilfe von LINQ-Mit Kriterien-Feld (GroupBy)
Ich habe eine DataTable wie folgt aufgebaut:
Benutzername | Preis
"jack" .01
"jack" .02
"mary" .03
"mary" .04
Wie kann ich mithilfe von LINQ auf die DataTable-die Rückkehr der MAX PREIS FÜR JACK (ex: .02)?
Code, um den setup-Tabelle (kann ignoriert werden).
DataTable tbl = new DataTable();
tbl.Columns.Add("username");
tbl.Columns["username"].DataType = typeof(string);
tbl.Columns.Add("price");
tbl.Columns["price"].DataType = typeof(double);
DataRow r = tbl.NewRow();
r["username"] = "jack"; r["price"] = .01;
tbl.Rows.Add(r);
r = tbl.NewRow();
r["username"] = "jack"; r["price"] = .02;
tbl.Rows.Add(r);
r = tbl.NewRow();
r["username"] = "mary"; r["price"] = .03;
tbl.Rows.Add(r);
r = tbl.NewRow();
r["username"] = "mary"; r["price"] = .04;
tbl.Rows.Add(r);
Dies ist, wo ich nicht weiterkommen. Zurückkehren möchten, eine Zeile für Jack mit seinem höchsten Preis (ex: ".02").
var result =
from row in tbl.AsEnumerable()
where (string) row["username"] == "jack"
group row by new {usernameKey = row["username"]} into g
select new
{
//WHAT IS THE LINQ SYNTAX TO USE HERE?
jackHighestPrice = g.Max(x => x.price); //This doesn't work, VS doesn't see the "price" field as strongly typed (not sure why).
};
//This should display Jack's highest price.
MessageBox.Show(result.First().jackHighestPrice.ToString());
Ich bin mir nicht sicher, wie man Visual Studio zu erkennen ist der "Preis" - Feld als stark typisiert. Vermutlich ist es im Zusammenhang mit dem Thema.
Natürlich zwei Abfragen arbeiten (eine zum filtern von username, dann die andere zu wählen, Max, aber es ist nicht so elegant.
Bezug auf diese Antwort. Versucht einfach über alles/überall gesucht, aber kein Glück.
Dank.
InformationsquelleAutor rr789 | 2012-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht auf den "Preis", dass die Art und Weise, da es keine
price
Mitglied aufDataRow
. Einfach zugreifen Sie es wie Sie tun, mitusername
(Spalte name):Natürlich könnte man einfach tun:
InformationsquelleAutor Andrew Whitaker
Haben Sie versucht:
all die Jahre wusste nicht, Sie könnten cast Spalten wie, dass statt z an.Feld<double>["MIETE"] vs (double)["MIETE"] so.... +1
InformationsquelleAutor WorldIsRound
Jedoch, da Sie damit nur einen user, der Gruppierung nicht notwendig. Wählen Sie einfach die maximale wie @WorldIsRound schlägt.
Sie können bis Abstimmung jede Frage oder Antwort, die Sie, indem Sie auf die Pfeil-nach-oben.
vielen Dank für das zeigen der Lösung in nicht-fluid-Stil
InformationsquelleAutor Olivier Jacot-Descombes