迭代实体框架中表的所有列

时间:2013-06-19 11:07:19

标签: .net asp.net-mvc entity-framework

我在ASP.Net MVC工作并使用Entity Framework。

我有以下表格架构

MyTable(Y1947, Y1948, Y1949, Y1950,.........Y2012)

列从Y1947开始到Y2012

我想遍历所有这些列。我正在使用以下代码,这是不可执行的:

    EntityFramework ef = new EntityFramework();
    var q = from table in ef.MyTable
            select table;

    int i = 1947;

    foreach(var item in q)
    {
       string str=item["Y" + i].toString();   // Error in Entity Framework
       i++;
    }

但实体框架限制使用item.Y1947等,我只想迭代所有列。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

在实体框架中,您没有得到一个数据表,您获得了一个对象。如果你真的想要一个数据表或类似的,也许最好选择另一个框架。

然而,你可以用反射来做这个,形式的东西(没有编译这个,但你得到的图片)

foreach(var item in q)
{
    foreach(var col in item.GetType().GetProperties().Where(p=>p.Name.StartsWith("Y19") || p.Name.StartsWith("Y20"))
    {
        var thing = col.GetValue(item, null);
    }
}

答案 1 :(得分:1)

不确定你想要达到的目标,但如果我理解得很好,我会选择那样的东西

public partial class MyTable {

  public string DisplayYValues() {
    var sb = new StringBuilder();
    var properties = this.GetType().GetProperties().Where(m => m.Name.StartsWith("Y"));

   foreach (var property in properties) {
      var value = property.GetValue(this, null);
      sb.AppendLine(value == null ? string.Empty : value.ToString());
   }
   return sb.ToString();
  }
}

然后使用

EntityFramework ef=new EntityFramework();
    var q=(from table in ef.MyTable
           select table).ToList();

var result = q.Select(m => m.DisplayYValues());