2013-01-18 115 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]; 
      } 
     }