在Select中选择LINQ
本文关键字:LINQ 选择 Select | 更新日期: 2023-09-27 18:24:50
我正在尝试查询包含员工信息的集合。当我查询该集合时,我想返回对象的枚举,其中每个对象都有两个字段:
- 名称
- 经理姓名
(请注意,每个经理也是一名员工!)
现在,这是我遇到的问题。当我在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
的值时,我会发现它是一个产生单个项的枚举。并且单个项目是一个包含管理器名称的字符串。所以,我想我已经接近了。
问题:如何更改查询,使其返回对象的枚举,其中每个对象只有两个字符串字段Name
和ManagerName
?
试试这个:
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
};