【问题标题】:Populate a selected list from another selected list in one View从一个视图中的另一个选定列表填充选定列表
【发布时间】:2020-11-25 22:11:13
【问题描述】:

我有一个具有这种关系的数据库: 1 Projekt 可以有很多参考。 1Referenze 可以有多个 Datei。

我试图在视图页面上填充 2 个列表(编辑项目)。第一个列表是Referenz:-

 ViewBag.referenz = new SelectList(db.FileRefObj.Where(x => x.ProjectId == id).ToList(), "FileReferenz", "FileReferenz");

如何填充 Datei 列表,它应该包含一个列表,其中 ReferenzId 存在于第一个列表中?

ViewBag.datei = new SelectList(db.DateiObj.Where(x => x.ReferenzId == ?? ).ToList(), "DateiName", "DateiName");

【问题讨论】:

    标签: c# asp.net-mvc entity-framework linq model-view-controller


    【解决方案1】:

    您可以为此目的使用 List 类中的 Any() 方法。据记载:

    确定序列的任何元素是否满足条件。

    返回:如果源序列中的任何元素通过了测试,则返回 True 指明谓词;否则为假。

    话虽如此,我会先将您的列表缓存为 List,而不是 SelectList:

    var referenzList = db.FileRefObj.Where(x => x.ProjectId == id).ToList();
    ViewBag.referenz = new SelectList(referenzList, "FileReferenz", "FileReferenz");
    

    然后我会 Any() 退出第一个缓存列表,就像这样:

    var dateiList = db.DateiObj.Where(x => referenzList.Any(y => y.ReferenzId == x.ReferenzId)).ToList();
    ViewBag.datei = new SelectList(dateiList, "DateiName", "DateiName");
    

    【讨论】:

      【解决方案2】:

      我可以提出几种方法:

      服务器端

      var fileReferenz = db.FileRefObj.Where(x => x.ProjectId == id);
      
      ViewBag.referenz = new SelectList(fileReferenz, "FileReferenz", "FileReferenz");
      
      var datei = db.DateiObj
          .Where(x => fileReferenz.Select(r => r.ReferenzId).Contains(r => x.ReferenzId == r);
      
      ViewBag.datei = new SelectList(datei, "DateiName", "DateiName");
      

      混合

      这里的区别在于我们将 FileRefObj 检索到客户端并使用 ids 进行过滤。

      var fileReferenz = db.FileRefObj.Where(x => x.ProjectId == id).ToList();
      
      ViewBag.referenz = new SelectList(fileReferenz, "FileReferenz", "FileReferenz");
      
      var datei = db.DateiObj
          .Where(x => fileReferenz.Select(r => r.ReferenzId).Contains(r => x.ReferenzId == r);
      
      ViewBag.datei = new SelectList(datei, "DateiName", "DateiName");
      

      使用Include

      var fileReferenz = db.FileRefObj
         .Include(x => x.Datei)
         .Where(x => x.ProjectId == id)
         .ToList();
      
      ViewBag.referenz = new SelectList(fileReferenz, "FileReferenz", "FileReferenz");
      
      var datei = fileReferenz.SelectMany(x => x.Datei);
      
      ViewBag.datei = new SelectList(datei, "DateiName", "DateiName");
      

      【讨论】:

        猜你喜欢
        • 2021-01-27
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多