0

我有一个实体说具有属性 Dnshostname 和导航属性 TechnicalProductsHosted 的计算机。Computers to TechnicalProductsHosted 是多对一和一对多的关系。TechnicalProductsHosted 是 odata 中的 TechnicalProducts。实体 TechnicalProducts 具有具有多对一关系的导航属性责任用户。ResponsibleUser 是 odata 中的 Employee。员工有一个导航属性 Manager 与多对一关系。当我点击经理时,它会将我带到员工实体。我希望获得经理姓名列表。我正在使用 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' 的定义,并且找不到接受'LINQPad.User.Employee' 类型的第一个参数的扩展方法'Select'(按F4 以添加使用指令或程序集引用)

4

1 回答 1

2

我假设 Manager 属性是一个单例(它不是一个集合)。在这种情况下,您可以在其上使用 Select。而是使用这样的东西:

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

这将为您提供具有指定主机名的计算机列表,并在每台计算机上列出负责该产品的报告的经理列表。请注意,虽然可能有重复。

如果您可以描述查询应该实现的目标,那么可能会有更好的选择。

于 2012-07-05T19:10:07.383 回答