У меня есть 4 сущности, которые связаны следующим образом:
LocalAgency<-0..1----1->Agency<-0..1----1->Organization<-0..1----1->Customer
Другими словами, LocalAgency
имеет один связанный Agency
и т. Д. Модель данных настроена с использованием Entity Framework
(содержащего свойства навигации для просмотра этих отношений), а WCF DataService
настроен на предоставить эти данные клиентам.
На стороне клиента, которая потребляет DataService
, я пытаюсь вернуть запрос местных агентств на основе имени клиента, но не нашел поддерживаемого способа сформулировать этот простой запрос.
Первый метод, который я попробовал, использовал Expand
следующим образом:
var items = (from i in Context.LocalAgencies.Expand("Agency").Expand("Organization").Expand("Customer")
where (String.IsNullOrEmpty(CustomerName) || i.Agency.Organization.Customer.CustomerName.Contains(CustomerName))
select i).Skip(StartIndex).Take(PageSize).ToList<LocalAgency>();
Этот подход работает, если "соединение" имеет глубину только 1 уровень, но при этом не удается получить навигационные свойства навигационных свойств.
Затем я попытался join
следующим образом:
var items = (from localAgency in Context.LocalAgencies
join agency in Context.Agencies on localAgency.CustomerID equals agency.CustomerID
join organization in Context.Organizations on localAgency.CustomerID equals organization.CustomerID
join customer in Context.Customers on localAgency.CustomerID equals customer.CustomerID
where (String.IsNullOrEmpty(CustomerName) || customer.CustomerName.Contains(CustomerName))
select localAgency).Skip(StartIndex).Take(PageSize).ToList<LocalAgency>();
Но join
в этом случае не поддерживается.
Затем я попытался использовать метод Except
следующим образом:
IQueryable<LocalAgency> items = Context.LocalAgencies;
items = items.Except(from i in items
where (String.IsNullOrEmpty(CustomerName) || i.Agency.Organization.Customer.CustomerName.Contains(CustomerName))
select i).Skip(StartIndex).Take(PageSize);
Но Except
в этом случае не поддерживается.
Что мне не хватает? Нужно ли что-то настраивать на стороне DataService
, чтобы можно было просто объединить определенные свойства навигации?