8つのフィールドを持つDataTableがあります。最初の7つのフィールドをグループ化し、8番目の最大値を持つ別のDataTableを返したいと思います。すべてのフィールドは文字列であり、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"
この場合、24> 18であるため、DataRow 2のみを返し、stu_that
値を取得できるようにします。