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

时间:2016-11-01 04:29:37

标签: asp.net-mvc linq viewmodel

我在MVC,linq和viewmodels方面相当新。我设法让创建和索引视图工作。 “插入”并不像“列表”那么难。

我有这个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”部分。当我在调试中运行时,“列表”显示正常,但如果我注释掉“foreach”,我会收到错误 - 即不期待模型。 foreach做了什么?它与数据库有关,但我不明白它在哪里使用“o”并设置列。我以为它都会在一个linq查询中。是否有可能将两者结合起来并消除“foreach”?

2 个答案:

答案 0 :(得分:5)

        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();

答案 1 :(得分:0)

我相信foreach是需要的,以便读取对象中的每个元素,所以在这种情况下你有:

BlendElVM o = new BlendElVM();

因此,您正在创建BlendELVM类型的名为“o”的对象,并且此对象包含您之前声明的所有属性: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列表