【问题标题】:Linq + MVC getting Job Name from Job IDLinq + MVC 从作业 ID 获取作业名称
【发布时间】:2021-07-09 14:05:09
【问题描述】:

我有一个包含 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();
        }
    }
}

所以我正在寻找的是链接到第三个表并将作业 ID 获取到作业名称。

【问题讨论】:

    标签: c# entity-framework linq model-view-controller linq-to-sql


    【解决方案1】:

    在数据库本身具有适当关系的情况下,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
                       });
    

    看起来像员工,员工详细信息是一对一的,如果不是,您最好从员工详细信息开始。

    【讨论】:

      【解决方案2】:

      听起来您需要为您的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)
                             });
      

      或者,您可以使用 Entity Framework 尝试以下操作:

      var Employee = db.Employee.Include(x => x.EmployeeDetails).ThenInclude(y => y.Job);
      

      确保添加 using System.Data.Entity; 以获取包含 lambda 的 Include 版本。

      【讨论】:

        猜你喜欢
        • 2019-02-08
        • 2012-12-30
        • 2017-03-12
        • 2015-07-03
        • 2018-10-07
        • 2021-09-26
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多