2010-03-17 3 views
0

인 대상 선택 아래의이 끔찍한 코드로 끝났습니다. 지금은 더 나은 결과를 얻을 수 없습니다. 더 좋은 방법은 무엇입니까?LINQ to SQL, 최대 날짜가

그것은 내 데이터베이스의이 부분에 관하여 :

Hosted by imgur.com

편집

PatientSubscription 여러 MonitoringObjects에 있습니다. Target 레코드는 Subscriptions입니다. 주어진 Patient 및 에 대해 Subscription에 대해 가장 최근 날짜의 대상 레코드를 검색하고 싶습니다. 이 대상 레코드의 최대 날짜는 달라질 수 있습니다. Subscriptions ~ MonitoringsObjects에 대해 Targets을 개별적으로 추가 할 수 있습니다.

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

+0

좋습니다, 시도하겠습니다. – andreas

답변

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

+0

@andreas :이 솔루션에 어떤 문제가 있습니까? AHM은 저를 때렸지 만 비슷한 것을 제안했을 것입니다. – Jens

+0

네, 답안을 쓰는 동안 모델 다이어그램을 추가 했으므로 놓친 것 같아요.하지만 예상 한 것처럼 보입니다. 관계 속성이 없기 때문입니까? 그렇다면 조인 구문을 사용하여 동일한 효과를 얻을 수 있습니다. – AHM