我有一个包含 8 个字段的 DataTable。我想返回另一个数据表,它将前 7 个字段分组并具有第 8 个字段的最大值。所有字段都是字符串,第 8 个是存储在字符串字段中的数字,例如“24”。
到目前为止我尝试过的代码:
public DataTable highestVersion(DataTable dt)
{
DataTable dtResult=dt.Clone();
var query=from dtRow in dt.AsEnumerable()
group dtRow by new
{
b_r = dtRow["r"],
b_1 = dtRow["b_1"],
b_2 = dtRow["b_2"],
p_r = dtRow["p_r"],
p_1 = dtRow["p_1"],
p_2 = dtRow["p_2"],
p_f = dtRow["p_f"]
}
into maxVersion
select maxVersion.OrderByDescending(a => a["p_v"]).First();
foreach (var result in query)
{
dtResult.ImportRow(result);
}
return dtResult;
}
我的期望是应该按前 7分组,并通过调用group dtRow by new{}
仅获取每个分组的最高元素。但这似乎并没有真正做任何事情。正在返回所有输入行。p_v
OrderByDescending().First()
编辑:我刚刚意识到问题所在。中的值p_f
彼此不同,例如
datarow 1
--------
r: "abc"
b_1: "def"
b_2: "ghi"
p_r: "jkl"
p_1: "mno"
p_2: "pqr"
p_f: "stu_this"
p_v: "18"
datarow 2
--------
r: "abc"
b_1: "def"
b_2: "ghi"
p_r: "jkl"
p_1: "mno"
p_2: "pqr"
p_f: "stu_that"
p_v: "24"
在这种情况下,我只想返回 DataRow 2,因为 24>18,并且能够检索该stu_that
值。