我在ASP.Net MVC工作并使用Entity Framework。
我有以下表格架构
MyTable(Y1947, Y1948, Y1949, Y1950,.........Y2012)
列从Y1947
开始到Y2012
。
我想遍历所有这些列。我正在使用以下代码,这是不可执行的:
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
等,我只想迭代所有列。请帮我解决这个问题。
答案 0 :(得分: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 :(得分: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());