来自 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))                    
            })           
}