我的Linq to sql类中有一个这样的表:
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];
有人可以帮我吗?
答案 0 :(得分:1)
对象中的属性不一定与数据库中列的顺序相同。
您可以通过索引选择一个属性进行反射,但这没有意义。您应该使用列的名称。
根据您的评论,这些列的名称以数字结尾,这是您可以做的。
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)
答案 1 :(得分:0)
您可以将结果转换为像这样的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"];