переходное отношение к отношению в odata

У меня есть сущность, скажем, "Компьютеры" со свойствами Dnshostname и свойством навигации TechnicalProductsHosted. Computers to TechnicalProductsHosted - это отношения «многие к одному» и «один ко многим». TechnicalProductsHosted - это TechnicalProducts в odata. Entity TechnicalProducts имеет свойство навигации ResponsibleUser с отношением «многие к одному». ResponsibleUser - это сотрудник в odata. Сотрудник имеет диспетчер свойств навигации с отношением "многие к одному". Когда я нажимаю на «Менеджер», я попадаю в объект «Сотрудник». Я хочу получить список имен менеджеров. Я использую Linqpad. Ниже приведен код.

void Main()
    {
    var a = from cpuid in Computers
          where cpuid.DnsHostName == "xyz"
          select new {
    ITManager = cpuid.TechnicalProductsHosted.Select (x => x.ResponsibleUser.Manager.Select(z => new { ITManager = z.Name })),
          };
    Console.WriteLine(a);
    }

Это ошибка. LINQPad.User.Employee не содержит определения для Select, и не может быть найден метод расширения Select, принимающий первый аргумент типа LINQPad.User.Employee (нажмите F4, чтобы добавить директиву using или ссылку на сборку )


person Swapnil    schedule 05.07.2012    source источник


Ответы (1)


Я предполагаю, что свойство Manager - это одноэлемент (это не коллекция). В этом случае вы можете использовать Select на нем. Вместо этого используйте что-то вроде этого:

var q = from cpuid in Computers
     where cpuid.DnsHostName == "xyz"
     select new {
         ITManagers = cpuid.TechnicalProductsHosted
             .Select (x => x.ResponsibleUser.Manager.Name)
     };

Это даст вам список компьютеров с указанным именем хоста и на каждом из них список менеджеров, отчет которых отвечает за продукты. Обратите внимание, что, вероятно, будут дубликаты.

Если бы вы могли описать, чего должен достичь запрос, возможно, были бы лучшие варианты.

person Vitek Karas MSFT    schedule 05.07.2012
comment
Это именно то, что я хочу, чтобы запрос был выполнен. Как вы думаете, почему могут быть дубликаты? Спасибо за вашу помощь. - person Swapnil; 06.07.2012
comment
Запрос вернет запись для компьютера с заданным именем, но тогда свойство ITManagers будет включать менеджера для каждого размещенного продукта. Если у вас есть один и тот же менеджер, курирующий два продукта, вы получите этого менеджера дважды. Но этого может не случиться с вашим набором данных. - person Vitek Karas MSFT; 06.07.2012