タイトルのある通りLINQである配列から枝番のMAX値の行だけを取り出したくて以下のコードを記述しました。
全件取得よりもレスポンスが悪化したので何かもっといい案がないか検討中です。
元のデータは
{apiresponse:
{
XX:XX....
idatas :
{
r_no:101
XX:XX....
sdatas:
{
r_no:101
r_no:1
},
{
r_no:101
r_no:2
}
},{
r_no:102
XX:XX....
sdatas:
{...}
}
}
このような階層のJSONになっており
やりたいことはSQLでいうと
SELECT
a.r_no --PK1
,a.r_no2 --PK2
,a.s_dt
,.......
FROM
datas a
INNER JOIN ON
(
SELECT
r_no
,MAX(r_no2) r_no2
FROM
datas
GROUP BY
r_no
) b
ON a.r_no = b.r_no
AND a.r_no2 = b.r_no2
これを何とかLINQでできないかと検討しました。
//外部APIの呼び出し
var apiResponse = (await XXXAsync(XXX, YYY));
var sdatas = apiResponse.idatas
.Select(s =>
{
var max = s.sdatas.Max(m => m.r_no2);
var maxdata = s.sdatas.First(f => f.r_no2 == max);
return new ResponseSdata()
{
r_no = maxdata.r_no1,
r_no2 = maxdata.r_no2,
s_dt = maxdata.s_dt,
s_name = maxdata.s_dt,
c_dt = maxdata.c_dt,
c_person = maxdata.c_person,
c_memo = maxdata.c_memo,
s_m_cd = maxdata.s_m_cd
};
}
);
※3/26 更新:ご指摘いただいた内容で修正しました。プログラムもすっきりし、かつパフォーマンスも改善されました。