如何从此 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 列表
我对 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 列表