从ViewModel到Controller ViewBag的LINQ查询,以显示在视图的SelectList中

本文关键字:显示 视图 SelectList 查询 ViewModel Controller ViewBag LINQ | 更新日期: 2023-09-27 18:12:42

我正在学习MVC的过程中,它被证明是一个相当令人钦佩的敌人,看到我是如何习惯web表单的。

我可以在web表单中做很多事情,我似乎无法在MVC中复制,如果我可以,我在实际实现它时就会迷路。但我的问题是:

我有一张表

public partial class Patient
{
    public Patient()
    {
        this.PatientHousings = new HashSet<PatientHousing>();
    }
    public Guid ID {get;set;}
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public bool Incarcerated {get;set;}
    public bool Released {get;set;}
    public bool Deceased {get;set;}
    public virtual ICollection<PatientHousing> PatientHousings {get;set;}
}

这是另一张表

public partial class PatientHousing
{
    public Guid ID {get;set;}
    public Guid PatientID {get;set;}
    public bool CurrentPrevious {get;set;}
    public string Building {get;set;}
    public virtual Patient Patient {get;set;}
}

好的,所以在web表单中,我只需将下拉列表绑定到具有适当查询的数据源。这在MVC中是做不到的,我必须使用控制器我现在还在用控制器把脑袋往墙上撞

我读到我需要创建一个ViewModel来帮助我做到这一点,所以我创建了以下

public class PatientViewModel
{
    public List<Patient> patients {get;set;}
    public PatientViewModel(){
        DATAEntities db = new DATAEntities();
        patients = db.Patients.Include(r => r.PatientHousings.Where(h => h.CurrentPrevious == true)).Where(x => x.Incarcerated == false && x.Released == false && x.Deceased == false && !string.IsNullOrEmpty(x.LastName)).ToList();
    }
}

现在我得到这个错误

Include路径表达式必须引用在该类型上定义的导航属性。引用导航属性使用点点路径,集合导航属性使用Select操作符。

谁来帮帮我。我现在很迷茫,一点都不好笑。

澄清一下:我需要做的是,在视图中创建一个选择列表,列出所有未被监禁、释放或死亡的患者。

从ViewModel到Controller ViewBag的LINQ查询,以显示在视图的SelectList中

我认为你不能在Include中使用'where',因为它不是允许的导航属性之一。

https://msdn.microsoft.com/en-us/library/gg671236 (v = vs.103) . aspx

是否有办法定义。where inside .Include

您可以尝试使用Select或没有它的表达式,然后使用Where进一步过滤。