6

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

  • 姓名
  • 经理姓名

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

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

System.Data.Common.Internal.Materialization.CompensatingCollection<string>

这是查询:

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,我发现它是一个产生单个项目的枚举。并且单个项目是一个包含经理名称的字符串。所以,我想我很接近了。

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

4

2 回答 2

17

试试这个:

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
            };
于 2013-07-24T17:49:07.140 回答
2

看起来自加入应该可以工作:

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
              };
于 2013-07-24T17:56:03.963 回答