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

  • 名称
  • 管理员名称

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

    现在,这就是我遇到的问题。当我在select中执行select时,在每个对象上返回的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的值时,我看到它是一个产生单个项目的枚举。并且该单个项目是一个字符串,其中包含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
                };
    

    10-07 16:48