我正在努力消除一些记录,并尝试在Linq中使用GroupBy,但没有任何运气。
DataTable prices = (from t1 in product.AsEnumerable()
join t2 in info.AsEnumerable() on (string)t1["productId"] equals (string)t2["productId"]
where t1["Date"] == string.Empty || t1["Date"] == null
select new {
reference_id = t1["RscId"],
last_name = t2["Last"],
first_name = t2["First"],
credentials = t2["Title"],
price= t1["price"]
}
)
.Distinct().CopyToDataTable();
我可以获得每一行的最高价格,但是我无法使用带有以下代码的g
对象访问其他列:
var result = from row in prices.AsEnumerable()
group row by new { price= row["price"] } into g
select new
{
HighestPrice = g.Max(x => x["price"])
};
如何从传入数据中获取所有列,但如何将行限制为列中具有最大值的行?
答案 0 :(得分:1)
在您最后发表评论后,您的要求开始变得有意义。您具有其中一些产品可能具有相同价格的产品数据。您想知道价格最高的产品。
因此,按价格分组是一种可能的方法。为此,您需要具有最高密钥的组:
var products = new DataTable();
products.Columns.Add("ProductId", typeof(string));
products.Columns.Add("Name", typeof(string));
products.Columns.Add("Price", typeof(int));
int j = 0;
for (int i = 0; i < 30; i++)
{
j++;
products.Rows.Add(new object[] { i + 1, $"Prod{i:00}", i/10 + 1 });
}
var result = products.AsEnumerable().GroupBy(r => r.Field<int>("Price"))
.OrderByDescending(g => g.Key)
.Take(1);
(在Linqpad中)哪个给您:
三个价格分别为1、2和3的组。