2010-03-17 98 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

相關問題