У меня есть DataTable, структурированный так:
username |цена
"Джек" .01
"Джек" .02
"Мэри" .03
"Мэри" .04
Как я могу использовать LINQ в DataTable для возврата МАКСИМАЛЬНОЙ ЦЕНЫ НА ДЖЕК (например: .02)?
Код для настройки таблицы (можно игнорировать).
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);
Вот где я застреваю.Хотите вернуть один ряд для Джека с его самой высокой ценой (например: «.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());
Я не уверен, как заставить Visual Studio распознавать поле «Цена» как строго типизированное.Угадай, это связано с проблемой.
Конечно, будут работать два запроса (один для фильтрации по имени пользователя, затем другой для выбора Макса, но это не так элегантно.
Относительно этого ответа . Попробовал толькообо всем / посмотрел все, но не повезло.
Спасибо.