我有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