LINQ在Select中选择

DK *_*ALT 5 c# linq

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

  • 名称
  • ManagerName

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

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

System.Data.Common.Internal.Materialization.CompensatingCollection<string>
Run Code Online (Sandbox Code Playgroud)

这是查询:

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
    };
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*rth 14

试试这个:

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()
            };
Run Code Online (Sandbox Code Playgroud)

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

var query = from e in db.Employees
            select new
            {
                Name = e.Name,
                ManagerName = e.Manager.Name
            };
Run Code Online (Sandbox Code Playgroud)