【发布时间】:2013-08-11 00:29:08
【问题描述】:
我有一个存储在数据库中的存储过程的名称(和几个视图)。在运行时,我查询数据库,然后运行所需的查询。由于我不知道查询的字段名称,也没有已知对象来存储结果,因此我使用动态变量
dynamic results = Respository.GetTableContents();
// not exactly the code but it conveys the point
该表将包含未知数量的字段,但对于此示例,字段名称是
Id, FirstName, Lastname //(this is what the table would be returning)
// Normally stored to a list of the model type
List<Users> resultsFromTable = ...
生成的动态数据可以通过
访问foreach(var r in result)
{
string name = r.FirstName + " " + r.LastName;
//.... Do something with the code, etc.
}
如果您知道属性名称,那就太好了。我不知道属性名称。
如何在不知道属性名的情况下访问动态变量的数据?
我的主要目标是在视图中使用它(剃刀)。
也许我处理问题的方法有误,但有更好的方法。有什么想法吗?
【问题讨论】:
-
我不确定你的
Respository.GetTableContents()返回什么,但我会使用一个简单的System.Data.DataTable然后我会使用foreach(DataColumn column in table.Columns)。在这种情况下,您将获得 DataColumn 类型,该类型可用于获取列的ColumnName属性,包括其DataType、长度,当然还有它的值 -
如果您的
Respository.GetTableContents()返回某个基于 ExpandoObject 的类,您可以将其转换为IDictionary<string, Object> -
@cha 我认为这是可行的,但我们刚刚实现了这个奇特的数据库存储库。希望下面的答案会奏效。如果没有,那么我可能不得不说服他们接受这个解决方案。
标签: c# sql variables dynamic razor