我有一个实体说具有属性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指令或程序集引用)
答案 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)
};
这将为您提供具有指定主机名的计算机列表,并在每个计算机上显示报告负责产品的经理列表。请注意,可能会有重复。
如果您可以描述查询应该实现的目标,那么可能会有更好的选择。