我最终得到了下面这个可怕的代码,我现在无法获得更好的结果。 有什么更好的方法呢?
这是关于我数据库的这一部分:
修改
Patient
有Subscription
到多个MonitoringObjects
。 Target
条记录引用了这些Subscriptions
。我想检索目标记录,其中Subscription
的{{1}}和Patient
Category
的最新日期为MonitoringObjects
。这些目标记录可能具有不同的最长日期,因为Targets
可以Subscriptions
独立地添加MonitoringsObjects
。
var subs = db.Subscriptions.Where(p => p.PatientID == patID).Where(p => p.MonitoringObject.Category.Name == "Medication");
var targets1 = from t in db.Targets
where subs.Contains(t.Subscription)
select t;
var maxTa = from t in db.Targets
group t by t.SubscriptionID
into g
select new
{
Ky = g.Key,
Date = g.Max(p => p.Date)
};
var targets2 = from t in targets1
where maxTa.Select(p => p.Ky).Contains( t.SubscriptionID ) &&
maxTa.Select(p => p.Date).Contains( t.Date )
select t;
答案 0 :(得分:1)
我不确定这是想要实现什么,或者你的数据模型是什么样的,但是这样的东西?
var subs = db.Subscriptions.Where(p => p.PatientID == patID).Where(p => p.MonitoringObject.Category.Name == "Medication");
var targets = subs
.SelectMany(s => s.Targets)
.Where(t => t.Date == t.Subscription.Targets.Max(_t => _t.Date))