Как получить только определенные подобъекты в LINQ? - PullRequest
2 голосов
/ 22 февраля 2010

У меня есть объект сущности (Company), который имеет 1 или более подобъектов (CompanyRevision), представленных как ненулевое отношение FK в базе данных. Используя LINQ, я хочу получить все компании из базы данных, но я также хочу только последнюю версию CompanyRevision для каждой компании. Вот как я делаю это сегодня, но у меня есть ощущение, что это можно сделать одним запросом.

IEnumerable<Company> companyList = from p in ctx.Company.Include("CompanyRevisions")
                                   select p;

foreach(Company c in companyList)
{
  CompanyRevision cr = (from p in c.CompanyRevisions
                        orderby p.Timestamp descending
                        select p).First();

  // Do something with c and cr...
}

Как видите, я хотел бы добавить этот второй запрос LINQ (тот, который получает последнюю версию CompanyRevision) в первый, так что companyList [i] .CompanyRevisions - это в основном список с одной записью (последняя один). Я не могу на всю жизнь понять, как это сделать. Пожалуйста, помогите!

Заранее спасибо

1 Ответ

2 голосов
/ 22 февраля 2010

как насчет этого: смешивание языка linq и методов расширения:

var results = from p in ctx.Company.Include("CompanyRevisions") 
select new {Company = p, 
            Revision = p.CompanyRevisions.OrderByDescending(cr => cr.Timestamp).First()
           }

Теперь у каждого результата есть участник Company и Revision.

Вполне возможно, что вы могли бы сделать это -

var results = from p in ctx.Company.Include("CompanyRevisions") 
select new {Company = p, 
            Revision = (from pcr in p.CompanyRevisions
                       orderby pcr.Timestamp descending
                       select pcr).First()
           }

Чтобы дать те же результаты.

Хотя это предположение - я не обдумал это; но я бы попробовал сначала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...