来自 3 个表的 Linq select 数据
Linq select data from 3 tables
我有这些 table 的数据库
ERD
我想 select 他们的数据看起来像
Query result
但我无法在查询中select Emloyees table 的名字+姓氏。这是我的代码
from d in Skills
where d.SkillID == 5 or d.SkillID == 6 or d.SkillID == 7
select new
{
Description = d.Description,
Employees = from emp in d.EmployeeSkills
select new
{
Level = emp.Level,
YearsExperience =emp.YearsOfExperience
Name = from na in emp.Employees
select new
{
na.FirstName + " " + na.LastName
}
}
}
您必须从 EmployeeSkills
实体中可用的引用中获取 Employee
信息,并使用 Select()
方法定义结果。您可以使用 let
关键字来定义子查询并在引用之间导航,对于示例 9,请查看查询的评论):
// define the query
var query = from d in Skills
// define a condition
where d.SkillID == 5 or d.SkillID == 6 or d.SkillID == 7
// define a value (in this case, a sub-query)
let employees = d.EmployeeSkills.Select(x => new {
Level = emp.Level,
YearsExperience =emp.YearsOfExperience,
Name = x.Employee.Name + " " + x.Employee.LastName
})
// define a result
select new
{
Description = d.Description,
Employees = employees
};
使用LINQ的流畅API:
var result = Skills.Select(s => new {
Description = s.Description,
Employees = Employees
.Where(e => EmployeeSkills.Where(es => es.SkillID == s.SkillID).Any(es => es.EmployeeID == e.EmployeeID))
.Select(e => new {
Name = String.Format("{0} {1}", e.FirstName, e.LastName),
Level = EmployeeSkills.Single(es => es.SkillID == s.SkillID && es.EmployeeID == e.EmployeeID).Level,
YearsExperience = EmployeeSkills.Single(es => es.SkillID == s.SkillID && es.EmployeeID == e.EmployeeID).YearsOfExperience
})
});
from d in Skills
where (d.SkillID == 5 || d.SkillID == 6 || d.SkillID == 7) // or is not supported
select new
{
Description = d.Description,
Employees = EmployeeSkills
.Where(es => es.SkillID == d.SkillID)
.Select(es => new
{
Level = es.Level,
YearsExperience = es.YearsOfExperience,
Emp = Employees.Single(emp => emp.EmployeeID == es.EmployeeID)
})
.Select(es => new
{
Level = es.Level,
YearsExperience = es.YearsExperience,
Name = es.Emp.FirstName + " " + es.Emp.LastName))
})
}
我有这些 table 的数据库 ERD
我想 select 他们的数据看起来像 Query result
但我无法在查询中select Emloyees table 的名字+姓氏。这是我的代码
from d in Skills
where d.SkillID == 5 or d.SkillID == 6 or d.SkillID == 7
select new
{
Description = d.Description,
Employees = from emp in d.EmployeeSkills
select new
{
Level = emp.Level,
YearsExperience =emp.YearsOfExperience
Name = from na in emp.Employees
select new
{
na.FirstName + " " + na.LastName
}
}
}
您必须从 EmployeeSkills
实体中可用的引用中获取 Employee
信息,并使用 Select()
方法定义结果。您可以使用 let
关键字来定义子查询并在引用之间导航,对于示例 9,请查看查询的评论):
// define the query
var query = from d in Skills
// define a condition
where d.SkillID == 5 or d.SkillID == 6 or d.SkillID == 7
// define a value (in this case, a sub-query)
let employees = d.EmployeeSkills.Select(x => new {
Level = emp.Level,
YearsExperience =emp.YearsOfExperience,
Name = x.Employee.Name + " " + x.Employee.LastName
})
// define a result
select new
{
Description = d.Description,
Employees = employees
};
使用LINQ的流畅API:
var result = Skills.Select(s => new {
Description = s.Description,
Employees = Employees
.Where(e => EmployeeSkills.Where(es => es.SkillID == s.SkillID).Any(es => es.EmployeeID == e.EmployeeID))
.Select(e => new {
Name = String.Format("{0} {1}", e.FirstName, e.LastName),
Level = EmployeeSkills.Single(es => es.SkillID == s.SkillID && es.EmployeeID == e.EmployeeID).Level,
YearsExperience = EmployeeSkills.Single(es => es.SkillID == s.SkillID && es.EmployeeID == e.EmployeeID).YearsOfExperience
})
});
from d in Skills
where (d.SkillID == 5 || d.SkillID == 6 || d.SkillID == 7) // or is not supported
select new
{
Description = d.Description,
Employees = EmployeeSkills
.Where(es => es.SkillID == d.SkillID)
.Select(es => new
{
Level = es.Level,
YearsExperience = es.YearsOfExperience,
Emp = Employees.Single(emp => emp.EmployeeID == es.EmployeeID)
})
.Select(es => new
{
Level = es.Level,
YearsExperience = es.YearsExperience,
Name = es.Emp.FirstName + " " + es.Emp.LastName))
})
}