我有一個這樣的表在我的LINQ to SQL類:如何通過索引來訪問列在LINQ
ID CL1 CL2 CL3 ... CL20
-- ---- ---- ----- ------
1 12 35 54 .... 44
2 11 35 78 ..... 75
數據是不是在這個例子中很重要的。
我需要訪問每列與他們的索引。
例如在CL3這樣達到的數據:
var x = db.myTable.single(a=>a.ID==1)[3];
誰能幫助我嗎?
我有一個這樣的表在我的LINQ to SQL類:如何通過索引來訪問列在LINQ
ID CL1 CL2 CL3 ... CL20
-- ---- ---- ----- ------
1 12 35 54 .... 44
2 11 35 78 ..... 75
數據是不是在這個例子中很重要的。
我需要訪問每列與他們的索引。
例如在CL3這樣達到的數據:
var x = db.myTable.single(a=>a.ID==1)[3];
誰能幫助我嗎?
則可以將結果轉換到DataTable這樣
public static DataTable ConvertToDataTable<T>(IList<T> list)
{
var dt = new DataTable();
var properties = typeof(T).GetProperties();
foreach (var pi in properties)
dt.Columns.Add(pi.Name, pi.PropertyType);
foreach (T element in list) {
var row = dt.NewRow();
foreach (var pi in properties)
row[pi.Name] = pi.GetValue(element, null);
dt.Rows.Add(row);
}
return dt;
}
,然後你可以通過名稱或索引來訪問列。
var dt = ConvertToDataTable<test>(list);
var CL5 = dt.Rows[0][5];
var CL5_by_name = dt.Rows[1]["CL5"];
我試過這個,它的工作 – LIX 2010-03-13 08:41:47
對象中的屬性不一定與列在數據庫中的順序相同。
你可以通過索引來做反射來選擇一個屬性,但這是沒有意義的。您應該使用列的名稱。
根據你的評論,這裏的列名稱以數字結尾,這是你可以做的。
int columnIndex = 3;
var property = (from p in db.myTable.GetType().GetProperties()
where p.Name.EndsWith(columnIndex.ToString())
select p).First();
var record = db.myTable.single(a=>a.ID==1);
var x = property.GetValue(record, null)
看起來你可能有一個規範化問題。也許列應該是行? – 2010-03-02 09:27:00
它是我應該努力的一個數據庫。不幸的是我沒有**設計**它! – LIX 2010-03-02 10:31:53