我正在尝试返回从数据库动态类型返回的属性名称:
var d = mDataAccess.Single<dynamic>("select col1 = 'asd', col2 = 'qwe'");
object o = d;
var props = o.GetType().GetProperties();
int propsCount = props.Count();
propsCount是0,但我希望有2, 在这种情况下,下面的代码将返回给我两个名字:col1和col2
List<string> names = o.GetType().GetProperties().Select(x => x.Name).ToList();
为什么我没有获得我期望的属性的任何想法?
答案 0 :(得分:1)
如果您对词典列表感到满意,可以使用:
var results = database.Fetch<dynamic>(sql).Cast<IDictionary<string, object>>().ToList();
如果您想将其转换为Dictionary<string, List<string>>
,请按照以下步骤进行操作:
result.First().Keys.ToDictionary(k => k, k => result.Select(r => r[k].ToString()).ToList());
检查结果计数后。
答案 1 :(得分:0)
单次返回ExpandoObject。
您可以使用以下命令从查询中获取名称:
(d as IDictionary<String, object>).Keys
List<string> names = (d as IDictionary<String, object>).Keys.ToList();
答案 2 :(得分:0)
由于没有人可以提供有效的答案,我会发布我能解决的解决方案。
var e = new Dictionary<string, List<string>>();
Sql sql = new Sql("select col1 = 'asd', col2 = 'qwe'");
var d = mDataAccess.Query<dynamic>(sql);
if (d != null && d.Count() > 0)
{
List<string> cols = new List<string>();
foreach (var t in d.First())
{
cols.Add(t.Key);
}
foreach (var key in cols)
{
List<string> values = new List<string>();
foreach (var row in d)
{
foreach (var t in row)
{
if (t.Key == key) values.Add(t.Value.ToString());
}
}
e.Add(key, values);
}
}
return e;