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.

g.Max(x => x["Preis"]); oder g.Max(x => x.Feld<double>("Preis");

InformationsquelleAutor rr789 | 2012-03-03

Schreibe einen Kommentar