遍历与odata关系的关系

时间:2012-07-05 18:41:53

标签: c# linqpad

我有一个实体说具有属性Dnshostname和导航属性TechnicalProductsHosted的计算机。计算机到TechnicalProductsHosted是多对一和一对多的关系。 TechnicalProductsHosted是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指令或程序集引用)

1 个答案:

答案 0 :(得分:2)

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

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

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

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