将多个表中的数据连接到SelectList中,并在每个数据集前面使用MVC中的标题

本文关键字:前面 数据集 标题 MVC SelectList 数据 连接 | 更新日期: 2023-09-27 18:03:06

所以这比我过去一直在尝试做的要复杂一些。实际上我有几个不同的表:employee.employees, companies.employees, dbo.all_employeescompanies。它们由以下模型表示,依次为:employees1employeesall_employeescompanies

all_employees有3列all_idemployee_idemployee_type。我正在尝试制作一个SelectList来填充一个下拉列表,该列表将容纳按其相应公司划分的所有员工。我已设法按名称将所有员工放入组合框中,但我似乎不知道如何将员工分开。

这样想。如果all_employeesemployee_type为1的记录,他们属于我们公司,他们的名字和姓氏应该从employees1中提取,如果他们的employee_type不是1,那么他们属于另一家公司,应该从employees中提取

下面是我的粗略代码,它当前从两个表中提取所有员工,合并它们,并将它们放入一个选择列表中。我只需要弄清楚如何简单地将它们分开,使其看起来像

-- Select Employee --
-- Company 1
   First Last
   First Last
-- Company 2
   First Last
-- Company 3
   First Last

代码
        var query1 = from c in _db.employees1
                join p in _db.all_employees on c.employee_id equals p.employee_id into ps
                select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name };
        var query2 = from c in _db.employees
                join p in _db.all_employees on c.employee_id equals p.employee_id into ps
                select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name };
        var merged = query2.Union(query1);
        ViewBag.employeeid = new SelectList(merged, "employee_id", "name");

将多个表中的数据连接到SelectList中,并在每个数据集前面使用MVC中的标题

我遇到了一个可能的解决方案,以第三方扩展的形式。它实现了optgroup,并允许我轻松地控制一切。我认为这是最好的解决办法,但我不完全确定。

图书馆在这里。

修改后的代码现在看起来像这样:

控制器:

        var query1 = from c in _db.employees1
                join p in _db.all_employees on c.employee_id equals p.employee_id into ps
                select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name, companyID = 1, company = "LightHouse Electric" };
        var query2 = from c in _db.employees
                join p in _db.all_employees on c.employee_id equals p.employee_id into ps
                select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name, companyID = c.company_id, company = "Other" };
        var merged = query2.Union(query1);
        var data = merged.ToList().Select(t => new GroupedSelectListItem {
            GroupKey = t.companyID.ToString(),
            GroupName = t.company,
            Text = t.name,
            Value = t.employee_id.ToString()
        });
        ViewBag.employeeid = data;

视图:

            @Html.DropDownGroupListFor(model => Model.employee_id, (IEnumerable<GroupedSelectListItem>)ViewBag.employeeid,
                "-- Select --", new {@data_val = "true", @data_val_required = "The Name field is required.", @class="form-control"})