Как я могу объединить данные с Linq для Entities и WCF Data Services? - PullRequest
1 голос
/ 30 января 2012

У меня есть 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, чтобы можно было просто объединить определенные свойства навигации?

1 Ответ

2 голосов
/ 30 января 2012

Я использовал неправильный синтаксис на Expand.Я сделал следующее:

var items = (from i in Context.LocalAgencies.Expand("Agency").Expand("Agency/Organization").Expand("Agency/Organization/Customer")
where (String.IsNullOrEmpty(CustomerName) || i.Agency.Organization.Customer.CustomerName.Contains(CustomerName))
select i).Skip(StartIndex).Take(PageSize).ToList<LocalAgency>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...