将查询结果包含到List中

时间:2016-05-11 11:06:15

标签: asp.net-mvc entity-framework

我有一份医院名单

医院模式:

public class Hospital
{
    [Key]
    public int HospitalID { get; set; }

    public string Name { get; set; }

    public virtual ICollection<HospitalSpeciality> HospitalSpecialities { get; set; }
    public virtual ICollection<UserHospital> UserHospitals { get; set; }
}

我有与医院相关的用户。型号:

public class UserHospital
{
    [Key]
    public int UserHospitalID { get; set; }

    public int HospitalID { get; set; }
    public Hospital Hospitals { get; set; }

    public string Id { get; set; }
    public ApplicationUser Users { get; set; }
}

我需要在我的清单上还返回与医院相关联的用户号码。

如果我只有1家医院,这个查询很容易,但在我的情况下,我有一份医院名单

控制器:

    public ActionResult Index()
    {
        var result = db.Hospitals.ToList();
        return View(result);
    }

我真的不知道如何在我的列表中包含查询结果(用户数)。

我的观点:

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.HospitalID }) |
            @Html.ActionLink("Details", "Details", new { id=item.HospitalID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.HospitalID })
        </td>
    </tr>
}

1 个答案:

答案 0 :(得分:1)

看起来您需要确保在查询中返回用户...如下所示:

public ActionResult Index()
{
    var result = db.Hospitals
                   .Include("UserHospitals")
                   .Include("UserHospitals.Users")
                   .ToList();
    return View(result);
}

即使它们是虚拟的,延迟加载也不会发生,因为您正在剃刀视图中访问该属性。 Include正在强制进行预先加载。

或者,展示另一个Dbset ......

public DbSet<User> Users { get; set; }

现在您可以选择以下内容:

db.Users.Where(x => !x.active).ToList();

让我知道你是如何进行的:)