LINQ to SQL, выберите цели с максимальной датой - PullRequest
0 голосов
/ 17 марта 2010

Я закончил с этим ужасным кодом ниже, я не могу получить лучший результат сейчас. Как лучше это сделать?

Речь идет об этой части моей базы данных:

Размещено на imgur.com

EDIT

A Patient имеет Subscription для кратного MonitoringObjects. Target записи относятся к этим Subscriptions. Я хочу получить целевые записи с самой новой датой в Subscription для данного 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;

1 Ответ

1 голос
/ 17 марта 2010

Я не совсем уверен, чего это пытается добиться или как выглядит ваша модель данных, но что-то вроде этого?

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))
...