2010-03-17 116 views
0

我结束了下面这个可怕的代码,现在我得不到更好的结果。 什么是更好的方法呢?LINQ to SQL,选择具有最大日期的目标

这是关于我的数据库的这一部分:

Hosted by imgur.com

编辑

一个PatientSubscription多个MonitoringObjectsTarget记录是指这些Subscriptions。我想要检索具有Subscription的最新日期的目标记录,对于给定的PatientCategoryMonitoringObjects。这些目标记录可能有不同的最大日期,因为Targets可以独立添加SubscriptionsMonitoringsObjects

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

你能解释一下你想要选择什么吗?是否所有目标在潜艇中都有订购并且日期字段等于此集合中的最大值? – Jens 2010-03-17 12:58:24

+0

好的,我会试试。 – andreas 2010-03-17 13:03:10

回答

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)) 
+0

请参阅上面的数据模型的图片。 – andreas 2010-03-17 13:18:46

+0

@andreas:这个解决方案有什么问题? AHM打败了我,但我会提出类似的建议。 – Jens 2010-03-17 13:21:07

+0

是的,我想你在写我的答案时添加了模型的图表,所以我错过了它,但看起来像我期望的那样。是因为你没有关系属性吗?如果是这样,你可以使用连接语法来达到相同的效果。 – AHM 2010-03-17 13:30:40

相关问题