【问题标题】:Issue on looping over a list of ViewModel using for loop使用 for 循环遍历 ViewModel 列表的问题
【发布时间】:2017-11-06 17:09:18
【问题描述】:

在下面的控制器中,我需要遍历 List 的每个元素。 MyVieModel 有很多属性(列),列表有数千行。因此,为简洁起见,我需要使用外部和内部循环。但是,VS2015 抱怨控制器中的以下行。我该如何解决这个问题?

  1. 错误在内循环for (var j = 0; j < testlist[i].Count(); j++){...}MyViewModel 不包含 Count() 的定义
  2. if (testlist[i][j] ....){...} 行的错误:无法将带有 [] 的索引应用于 MyViewModel 类型的扩展

视图模型

public class MyViewModel
{
    [Key]
    public int ProductId { get; set; }
    public float laborCost { get; set; }
    public float ManufCost { get; set; }
    public float Price { get; set; }
    ....
    ....
}

控制器

....
....
var testlist = (qry to load MyViewModel).ToList();

for (var i = 0; i < testlist.Count; i++)
{
    for (var j = 0; j < testlist[i].Count(); j++)
    {
      if (testlist[i][j] ....)
      {
         ....
         ....
      }
    }
}

【问题讨论】:

  • 你的内部循环试图循环什么? testlist[i] 只会返回一个 MyViewModel 实例。
  • @ZippyZippedUp 将其视为mxn 维度的矩阵。我正在尝试遍历具有 m 行和 n 列的列表的每个条目。在我的代码中,I 是行数,j 是列数。有没有更好的解决方法?
  • 我看不到 MyViewModel).ToList() 如何返回 List[][]

标签: c# asp.net-core entity-framework-core


【解决方案1】:

在您的代码中,testlist[i]MyViewModel 类的一个实例。您不能简单地使用 for/foreach 循环遍历它的所有成员(属性、方法等)。

1) 使用 System.Reflection 获取对象中的属性列表(慢!)

2) 从所需的属性值手动创建数组

var testlist = (qry to load MyViewModel)
         .Select(x => new object[] { x.ProductId, x.laborCost, x.ManufCost ...})
         .ToList();

您的模型将是 List&lt;object[]&gt; 而不是 List&lt;MyViewModel&gt;

3) 手动检查所需属性:

if (testlist[i].ManufCost  ....)

【讨论】:

  • 您使用List&lt;object[]&gt; 而不是List&lt;MyViewModel&gt; 的步骤2 与我的外循环和内循环一起工作。我的帖子中的错误 1 ​​和 2 不再出现,即 testlist[i].Count();testlist[i][j] 现在可以工作了。感谢您逐步解释您的建议 - 这让事情变得容易理解。
猜你喜欢
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 2012-09-02
相关资源
最近更新 更多