我有以下功能用于报告目的。基本上,客户希望查看特定表中的前100行。
我试图从SqlQuery函数返回List<dynamic>
,并返回100个对象。但问题是当我将这个列表序列化为JSON时,我得到了空对象的完整列表。
public IList<object> GetTableContents(string tableName)
{
using (Context)
{
string query = string.Format("select top 100 * from {0} order by createDate desc",tableName);
List<dynamic> objects = Context.Database.SqlQuery<dynamic>(query).ToList();
return objects;
}
}
我下面是空数组。
JsonConvert.SerializeObject(objects)
我知道我可以使用ADO.NET数据读取器动态读取列和行, 但我想知道有没有办法从Entity Framework中检索动态列表?然后我可以将它绑定到JSON GridView阅读器?
答案 0 :(得分:0)
如果您使用数据库第一种方法,一种可能的选择是使用反射根据表名从上下文中查找Entity对象,而不是在上下文本身上使用sql查询。
context.GetType().GetProperty(tableName).GetValue(context, null);
这也可能比错误处理更加安全,因为你会得到一个非存在/无效表的异常,而不是让db服务器告诉你错误。