LINQ在Select中选择

我试图查询包含员工信息的集合。 当我查询该集合时,我想返回一个对象的枚举,其中每个对象有两个字段:

  • 名称
  • ManagerName

(请注意,每个经理都是员工!)

现在,这是我遇到的问题。 当我在select中执行select ,每个对象上返回的ManagerName字段的值为:

 System.Data.Common.Internal.Materialization.CompensatingCollection 

这是查询:

 var query = from e in db.Employees select new { Name = e.Name, ManagerName = from em2 in db.Employees where (em2.EmployeeID == e.ManagerID) select em2.Name }; 

具体来说,当我查看ManagerName的值时,我发现它是一个产生单个项目的枚举。 并且单项是包含Manager名称的字符串。 所以,我认为我很接近。

问题:如何更改我的查询,以便它返回一个对象的枚举,其中每个对象只有两个字符串字段NameManagerName

试试这个:

 var query = from e in db.Employees select new { Name = e.Name, ManagerName = db.Employees .Where(x => x.EmployeeID == e.ManagerID) .Select(x => x.Name).SingleOrDefault() }; 

但是,如果您使用EF (我认为您正在使用)正确映射数据库,则应该具有可以使用的导航属性:

 var query = from e in db.Employees select new { Name = e.Name, ManagerName = e.Manager.Name }; 

看起来自我加入应该工作:

 var query = from e in db.Employees join m in db.Employees on e.ManagerID equals m.EmployeeID select new { Name = e.Name, ManagerName = m.Name };