如何解决Linq + MVC 从作业 ID 获取作业名称
我有一个包含 3 个表的 SQL 数据库
- 员工
- 员工详情
- 工作
我使用 Linq 将 Employee 和 Employee Details 链接在一起,所以现在我有一个表,其中列出了所有员工和在 EmployeeDetails 表中引用的 JobID。所以当我运行我的项目时,它看起来像下面;
姓名扩展职务电子邮件
|马特|分机 0000 | 56 | email@email.co.uk
现在我想做的是链接到名为 Jobs 的第三个表,更改 ID 56 并实际获取作业名称。
我已经创建了我的模型和视图模型;
下面是我的控制器
namespace ServiceDirectory.Controllers
{
public class EmployeeController : Controller
{
private ApplicationDbContext db;
public EmployeeController()
{
db = new ApplicationDbContext();
}
// GET: Employee
public ActionResult Index(string searchBy,string search)
{
List<EmpVM> Employee = new List<EmpVM>();
var Emp = (from E1 in db.Employee
join E2 in db.EmployeeDetails
on E1.EmployeeID equals E2.EmployeeID
select new EmpVM
{
EmployeeID = E1.EmployeeID,Forename = E1.Forename,Surname = E1.Surname,Ext = E1.Ext,Email = E1.Email,Active = E1.Active,JobID = E2.JobID
});
if (searchBy == "Forename")
{
return View(Emp.Where(a => a.Forename.StartsWith(search) && a.Active == true));
}
else
{
return View(Emp.Where(a => a.Surname.StartsWith(search) && a.Active == true));
}
}
protected override void Dispose(bool disposing)
{
db.Dispose();
}
}
}
所以我正在寻找的是链接到第 3 个表并获取 Jobs ID 到 Job name。
解决方法
在数据库本身具有适当的关系的情况下,Linq 工具为您构建导航路径,您不需要“加入”(它用于加入通常不存在 pk-fk 关系的条件):
var Emp = (from E1 in db.Employee
select new EmpVM
{
E1.EmployeeID,E1.Forename,E1.Surname,E1.Ext,E1.Email,E1.Active,JobID = E1.EmployeeDetails.JobID
//,Job = E1.EmployeeDetails.Job.Name
});
看起来像employee,employeedetails 是1 比1,如果不是,你最好从EmployeeDetails 开始。
,听起来您需要为您的 Employee
提供一个 object
类型的 Job
类实例。
public class Employee {
public string EmployeeID {get;set;}
public string Forename {get;set;}
public string Surname {get;set;}
public string Ext {get;set;}
public string Email{get;set;}
public bool Active {get;set;}
public Job Job {get;set;}
}
那么您应该按照以下方式选择它们:
var Emp = (from E1 in db.Employee
join E2 in db.EmployeeDetails
on E1.EmployeeID equals E2.EmployeeID
select new EmpVM
{
EmployeeID = E1.EmployeeID,Forename = E1.Forename,Surname = E1.Surname,Ext = E1.Ext,Email = E1.Email,Active = E1.Active,Job= db.Job.First(x => x.JobID == E2.JobID)
});
或者,您可以使用实体框架尝试以下操作:
var Employee = db.Employee.Include(x => x.EmployeeDetails).ThenInclude(y => y.Job);
确保添加 using System.Data.Entity;
以获取包含 lambda 的 Include 版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。