2013-06-19 54 views
0

我正在使用ASP.Net MVC並使用實體框架。在實體框架中遍歷表中的所有列

我有如下表模式

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

列從開始到Y1947Y2012

我想遍歷所有這些列。我使用下面的代碼,這是不可執行的:

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等,我只是想通過所有列進行迭代。請幫助我如何做到這一點。

+1

你怎麼想呢?顯示所有表格行的內容,但只顯示以「Y」開頭的列? –

+1

體面正常化也不會傷害。 –

回答

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

不知道你想實現什麼,但如果我深知,我會去這樣的事情

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()); 
+0

大約相同的答案相隔10s,偉大的思想呃;) –