1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C# LINQでMAX値を保持する行のみ抽出

Last updated at Posted at 2019-03-25

タイトルのある通り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 更新:ご指摘いただいた内容で修正しました。プログラムもすっきりし、かつパフォーマンスも改善されました。

1
2
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?