Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何从这个linq代码中删除foreach?_Asp.net Mvc_Linq_Viewmodel - Fatal编程技术网

Asp.net mvc 如何从这个linq代码中删除foreach?

Asp.net mvc 如何从这个linq代码中删除foreach?,asp.net-mvc,linq,viewmodel,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 j

我对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);           
        }
public ActionResult Index()
{
List BEVM=新列表();
var list=(来自db.blends中的Blend)
在Blend.ID上的db.BlendEl中加入BlendEl等于BlendEl.ID
选择新的
{
Blend.ID、Blend.Title、Blend.TransDt、BlendEl.Comment
}).ToList();
foreach(列表中的变量项)
{
BlendElVM o=new BlendElVM();//视图模型
o、 注释=项目注释;
o、 标题=项目。标题;
o、 TransDt=item.TransDt;
o、 ID=item.ID;
添加(o);
}
返回视图(BEVM);
}

我不确定的是“foreach”部分。当我在调试中运行时,“列表”显示得很好,但是如果我注释掉“foreach”,我会得到一个错误——即不需要模型。foreach做什么?这与数据库有关,但我不明白它在哪里使用“o”和设置列。我以为这一切都会发生在一个linq查询中。是否可以将这两者结合起来并消除“foreach”?

我认为需要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列表中我相信在为了读取对象中的每个元素,在这种情况下,您可以:

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列表中请注意模型视图控制器标记是关于模式的问题。ASP.NET-MVC实现有一个特定的标记。您的查询正在创建匿名对象的集合。您的视图需要一组
BlendElVM
,因此,循环只是根据查询返回的值生成该对象的集合-您不一定需要它-您可以根据Robert Harvey的回答将查询投影到视图模型中。请注意,模型-视图-控制器标记用于有关模式的问题。ASP.NET-MVC实现有一个特定的标记。您的查询正在创建匿名对象的集合。您的视图需要一个
BlendElVM
集合,因此循环只是根据查询返回的值生成该对象的集合-您不一定需要它-您可以根据Robert Harvey的回答将查询投影到视图模型中。请记住,如果您针对DB Queryable执行此操作,只要BlendELVM只包含基本类型(字符串、整数、日期时间、布尔等),就可以使用这种方法。复杂属性是不允许的,即使它们没有分配它们。我更正了查询中的拼写,但现在我遇到了一个新问题:“不能在LINQ to Entities查询中构造实体或复杂类型“vmTwo.Models.BlendElVM”。“我还必须让foreach工作吗?可以将foreach转换为select,如
var BEVM=list.Select(new BlendELVM{ID=blend.ID,Title=blend.Title,TransDT=blend.TransDT,comment=blendEl.comment}).ToList()这在哪里合适?它是从“选择新BlendElVM…”开始的,还是我理解的那样,它取代了整个东西(“连接”等…)。如果我有两个表,比如库存和产品。假设大多数“列”都在库存中,但我想用“连接”来添加产品描述。我不一定要在库存和产品中使用匿名对象的集合吗?还有别的办法吗?Expando会更好吗?汽车制造商呢?我不知道的东西太多了。请记住,如果您针对DB Queryable执行此操作,只要BlendELVM只包含基本类型(字符串、整数、日期时间、布尔等),就可以使用此方法。复杂属性是不允许的,即使它们没有分配它们。我更正了查询中的拼写,但现在我遇到了一个新问题:“不能在LINQ to Entities查询中构造实体或复杂类型“vmTwo.Models.BlendElVM”。“我还必须让foreach工作吗?可以将foreach转换为select,如
var BEVM=list.Select(new BlendELVM{ID=blend.ID,Title=blend.Title,TransDT=blend.TransDT,comment=blendEl.comment}).ToList()这在哪里合适?它是从“selectnewblendelvm…”开始的,还是只是为了让我理解,它取代了整个东西(“join”等…)。如果我有两个表,比如