データベースのテーブル構造を変更できない場所で更新する必要があるアプリを継承しました。
ID | PromoID | VersionDate | Type
1 P0001 01/03/2013 Live
2 P0002 02/03/2013 Live
3 P0001 02/04/2012 Draft
4 P0003 01/03/2013 Live
5 P0003 01/02/2013 Live
したがって、元の開発者には、レコードのバージョン管理という原始的な概念がありました。私がする必要があるのは、すべての「ライブ」バージョンの最新バージョンを返す linq クエリを作成することですが、そのバージョンのいずれかのタイプが「ドラフト」の場合、レコードが返されないようにする必要もあります。
私はこれを持っています:
var records = from r in _context.Promotions
let maxversion =
(from v in _context.Promotions
where v.PromoID == t.PromoID
select v.VersionDate).Max()
where r.Type == "Live"
&& r.VersionDate == maxversion
select r
しかし、同じ PromoID を持つすべてのレコードを除外する方法がわかりません。そのうちの 1 つは「下書き」タイプです。私が提供したデータから、レコード #1 と #3 の両方を削除する必要があります。これらは同じ PromoId を共有し、#3 にはドラフトのタイプがあるためです。