2013-01-18 116 views
1

我在C#中的網頁/剃刀與MS SQL數據庫編碼通過MS SQL列循環

我有以下的列

  • SAT1
  • SAT2
  • SAT3表
  • Sat4
  • ...
  • Sat25

我想遍歷每個這些,並指定值satAvail

我有以下

for (var i = 1; i < 26; i++) 
{ 
    satWeek = "Sat" + i; 
    satAvail = item.satWeek; 
} 

我想要的satAvail = item.Sat1; 相當於我已經嘗試了一些不同的行但沒有快樂

+0

這是不可能的(在C#) – jAC

+0

如果要做到這一點,不要使用ORM。只需使用傳統的查詢方法,通過索引器訪問結果,這樣做很簡單。 – Servy

回答

0

我不知道我在你的實際需要明確的,但總的來說,與工作時3210,如果您想要訪問由Database.QueryDatabase.QuerySingle調用產生的列值,可以使用點符號或索引器進行。

例如,你可能會得到的數據這樣做:

var db = Database.Open("MyDatabase"); 
var item = db.QuerySingle("SELECT * FROM Mytable WHERE ID = 1"); 

如果知道要訪問一個名爲Sat1列的值,你可以使用item.Sat1。但是,如果列名錶示爲一個變量,你需要使用一個索引來代替:

var satWeek = "Sat" + "1"; 
var satAvail = item[satWeek]; 
+0

很抱歉,因爲沒有提前清楚或不知道確切的術語 - 這完全按照我的意願工作。布里爾感謝邁克 - 你和你的網站對我來說是一個巨大的幫助 – baconsandwich

1

使用反射

var value = item.GetType().GetProperty("Sat" + i).GetValue(item, null); 

,如果你想有一個總和(假設SAT1 ... SAT2是整數)

var sum = 0; 
for (var i = 1; i < 26; i++) { 
    sum +=(int)item.GetType().GetProperty("Sat" + i).GetValue(item, null); 
} 
satAvail = sum; 

或LINQ方式:

var sum = Enumerable.Range(1, 25) 
        .Select(x => (int)item.GetType().GetProperty("Sat" + x).GetValue(item, null)) 
        .Sum(); 
+0

Sat1 Sat2是列名稱,我收到無效列名稱「GetType」。 – baconsandwich

+0

@ user1990727你的意思是你沒有對應於你的表的類嗎?所以我的回答遠非有用,確實如此。你如何訪問你的數據庫? –

+0

@ user1990727也許顯示你的嘗試可以幫助。 –

1

,如果您使用的是ORM或ADO目前尚不清楚,但假設ADO,您可以使用類似:

DataTable dt = new DataTable(); 

     foreach (DataRow row in dt.Rows) 
     { 
      foreach (DataColumn column in dt.Columns) 
      { 
       var satAvail = row[column]; 
      } 
     }