使用for循环遍历ViewModel列表的问题

时间:2017-06-05 20:31:07

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

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

    内部循环for (var j = 0; j < testlist[i].Count(); j++){...}
  1. 错误MyViewModel不包含Count()的定义
  2. {li> 错误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] ....)
          {
             ....
             ....
          }
        }
    }
    

1 个答案:

答案 0 :(得分: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<object[]>而不是List<MyViewModel>

3)手动检查所需的属性:

if (testlist[i].ManufCost  ....)
相关问题