我有8个字段的DataTable。我想返回另一个将前7个字段分组并且最大值为8的DataTable。所有字段都是字符串,第8个是存储在字符串字段中的数字,例如, “24”。我到目前为止已经试过LINQ /通过多种标准的DataTable组和获得最大的
代码:
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;
}
我的期望是,group dtRow by new{}
应该由第一组7,并通过调用OrderByDescending().First()
每个分组只能得到最高的元素p_v
。但这似乎并没有做任何事情;所有的输入行都被返回。
编辑:我刚刚意识到的问题是什么。 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
值。
为了澄清,您只需要r,b_1,b_2,p_r,p_1,p_2和p_f的最大值,并且想要使用它作为排序来排序行? –
sigil,你为什么认为它不起作用?它确实! – horgh