如何从此 linq 代码中删除 foreach?

How do I remove the foreach from this linq code?

我对 MVC 和 linq 尤其是视图模型相当陌生。我设法让创建和索引视图工作。 "insert" 没有 "list" 难。

我有这个 linq 查询:

 public ActionResult Index()
        {
            List<BlendElVM> BEVM = new List<BlendElVM>();
            var list = (from Blend in db.blends
                        join BlendEl in db.blendEl on Blend.ID equals BlendEl.ID
                        select new
                        {
                            Blend.ID, Blend.Title, Blend.TransDt, BlendEl.Comment
                        }).ToList();

             foreach (var item in list)
              {
                  BlendElVM o = new BlendElVM(); // ViewModel
                  o.Comment = item.Comment;
                  o.Title = item.Title;
                  o.TransDt = item.TransDt;
                  o.ID = item.ID;
                  BEVM.Add(o);
              }
            return View(BEVM);           
        }

我不确定的是 "foreach" 部分。当我在调试 运行 时,"list" 显示正常,但如果我注释掉 "foreach",我会得到一个错误 - 即不期望模型。 foreach 的作用是什么?它与数据库有关,但我不明白它在哪里使用 "o" 和设置列。我认为这一切都在一个 linq 查询中。是否可以将两者结合起来消除"foreach"?

        var BEVM  = (from blend in db.blends
                    join BlendEl in db.blendEl on Blend.ID equals BlendEl.ID
                    select new BlendELVM
                    {
                        ID = blend.ID, 
                        Title = blend.Title, 
                        TransDT = blend.TransDt, 
                        comment = blendEl.Comment
                    }).ToList();

我认为需要 foreach 才能读取对象中的每个元素,因此在这种情况下您有:

BlendElVM o = new BlendElVM();

所以您正在创建名为“o”的 BlendELVM 类型的对象,该对象包含您之前声明的所有属性:ID、Title、TransDT 等

当你输入:

foreach (var item in list)
          {
              BlendElVM o = new BlendElVM(); // ViewModel
              o.Comment = item.Comment;
              o.Title = item.Title;
              o.TransDt = item.TransDt;
              o.ID = item.ID;
              BEVM.Add(o);
          }

你正在将你在列表中阅读的项目分配给新对象,最后将其添加到 BVEM 列表并回答你是否可以将它们组合起来我会说不,因为一开始你'重新声明查询,然后您正在读取列表中的项目并将它们分配给 BEVM 列表