C# 在odata中遍历关系到关系

C# 在odata中遍历关系到关系,c#,linqpad,C#,Linqpad,我有一个实体,比如说拥有Dnshostname属性和导航属性TechnicalProductsHosted的计算机。计算机与技术产品之间是一种多对一和一对多的关系。TechnicalProductsHosted是odata中的TechnicalProducts。实体TechnicalProducts有一个导航属性ResponsibleUser,具有多对一关系。负责人是odata的员工。该员工有一个具有多对一不动产关系的导航物业经理。当我点击经理时,它会将我带到员工实体。我希望获得经理姓名列表。我

我有一个实体,比如说拥有Dnshostname属性和导航属性TechnicalProductsHosted的计算机。计算机与技术产品之间是一种多对一和一对多的关系。TechnicalProductsHosted是odata中的TechnicalProducts。实体TechnicalProducts有一个导航属性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”的定义,并且找不到接受“LINQPad.User.Employee”类型的第一个参数的扩展方法“Select”(按F4添加using指令或程序集引用)

我假设Manager属性是单例(它不是集合)。在这种情况下,您可以在其上使用Select。 相反,请使用以下内容:

var q = from cpuid in Computers
     where cpuid.DnsHostName == "xyz"
     select new {
         ITManagers = cpuid.TechnicalProductsHosted
             .Select (x => x.ResponsibleUser.Manager.Name)
     };
这将为您提供一个具有指定主机名的计算机列表,并在每个计算机上列出负责产品的经理报告列表。但请注意,可能存在重复项


如果你能描述一下查询应该实现什么,可能会有更好的选择。

这正是我希望查询实现的。你认为为什么会有重复的?感谢您的帮助。查询将返回具有给定名称的计算机记录,但ITManagers属性将包含每个托管产品的管理器。如果你碰巧有同一个经理管理两种产品,你会得到该经理两次。但这可能不会发生在您的数据集上。