ОБНОВЛЕНО: См. Этот вопрос и ответ , чтобы понять ограничения на выбор многих в службах данных + Другое решение, основанное на $ expand (обратите внимание, что для поддержки требуется серверразвернуть)
Если это Службы данных WCF, а TitlesActedIn представляет собой набор связанных фильмов.Тогда вы можете сделать это в одном запросе, только если Person.Name является первичным ключом.
Чтобы проиллюстрировать это:
var titles = from p in people
where p.Name == "George Lucas"
from m in p.TitlesActedIn
select m;
Будет делать то, что вы хотите, но только если Имя является ключомсущность Person, в противном случае это не поддерживается.
Если имя не является ключевым, один из способов сделать это (сегодня) - это два запроса, примерно так:
var key = (from p in people
where p.Name == "George Lucas"
select new {p.Id}).Single().Id;
var titles = from p in people
where p.Id == key
from m in p.TitlesActedIn
select m;
Еще один вариантбыло бы сделать расширение:
var george = (from p in people.Expand("TitlesActedIn")
where p.Name == "George Lucas"
select p).Single();
var titles = george.TitlesActedIn;
Но это зависит от сервера, поддерживающего $ expand - что делают не все серверы ...
Обратите внимание, что в настоящее время мы работаем над добавлением любого/ вся поддержка OData и WCF Data Services, после того, как она будет выпущена, вы сможете написать:
var titles = from t in titles
where t.Actors.Any(a => a.Name == "George Lucas")
select t;
Надеюсь, это поможет
Примечание: в коде, который получает ключ для Джорджа Лукаса, я создаю анонимный тип, потому что сегодня WCF Data Services не поддерживает материализацию примитивов напрямую.