同じID内で最大のものを表示するときのEntityFramework
SQLDatabaseでシステム運用していたが、処理が遅くてエラーになってしまった。
クエリはこんな感じ
C#
var query = context.TBL_A.GroupBy(p => p.Type).Select(g => g.OrderByDescending(p => p.Date)
.FirstOrDefault()
出典
https://stackoverflow.com/questions/16273485/entity-framework-select-one-of-each-group-by-date
TBL_Aに対してType列でGroupByして、日付の降順に並び替え、FirstOrDefaultで1行目を取得します。これにより、同一値内の最大日付のレコードのみ取得することができます。
SQLDatabase、Basicプランで運用していましたが、対象テーブルが5000レコードを超えたくらいでタイムアウトエラーが発生してしまいました。30秒以上返ってこないでやんの。。
なので、修正してみました。
C#
var query = context.TBL_A.Wherey(x => !context.TBL_A.Any(s => s.Type == x.Type && s.Date > x.Date))
参考
http://labs.timedia.co.jp/2014/10/selecting-max-record-in-group-by.html
条件は同一のTypeかつDateが小さいもの。!context.TBL_A.Any でNot Exists句になるので、一番大きいものだけが取得できます。素晴らしい。
パフォーマンスも秒でかえってくるようになりました。
Author And Source
この問題について(同じID内で最大のものを表示するときのEntityFramework), 我々は、より多くの情報をここで見つけました https://qiita.com/tatataNakada/items/fdd7225b317633872b04著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .