C# PetaPoco-动态类型中的属性名称
我正在尝试返回从数据库动态类型返回的属性的名称:C# PetaPoco-动态类型中的属性名称,c#,dynamic,reflection,petapoco,C#,Dynamic,Reflection,Petapoco,我正在尝试返回从数据库动态类型返回的属性的名称: var d = mDataAccess.Single<dynamic>("select col1 = 'asd', col2 = 'qwe'"); object o = d; var props = o.GetType().GetProperties(); int propsCount = props.Count(); var d=mDataAccess.Single(“选择col1='asd',col2='qwe'”; 对象o=d
var d = mDataAccess.Single<dynamic>("select col1 = 'asd', col2 = 'qwe'");
object o = d;
var props = o.GetType().GetProperties();
int propsCount = props.Count();
var d=mDataAccess.Single(“选择col1='asd',col2='qwe'”;
对象o=d;
var props=o.GetType().GetProperties();
int-propscont=props.Count();
propsCount是0,但我希望有2,
在这种情况下,下面的代码将返回给我两个名称:col1和col2
List<string> names = o.GetType().GetProperties().Select(x => x.Name).ToList();
List Name=o.GetType().GetProperties().Select(x=>x.Name.ToList();
你知道为什么我没有得到我想要的属性吗?单返回ExpandoObject 您可以使用以下命令从查询中获取名称:
(d as IDictionary<String, object>).Keys
List<string> names = (d as IDictionary<String, object>).Keys.ToList();
(d为IDictionary)。键
列表名称=(d作为IDictionary.Keys.ToList();
由于没有人能提供有效的答案,我将发布我能够解决这个问题的解决方案
var e=newdictionary();
Sql=newSQL(“选择col1='asd',col2='qwe'”);
var d=mDataAccess.Query(sql);
如果(d!=null&&d.Count()>0)
{
List cols=新列表();
foreach(d.First()中的变量t)
{
cols.Add(t.Key);
}
foreach(cols中的var键)
{
列表值=新列表();
foreach(d中的var行)
{
foreach(第行中的var t)
{
if(t.Key==Key)values.Add(t.Value.ToString());
}
}
e、 添加(键、值);
}
}
返回e;
如果您对词典列表感到满意,可以使用:
var results = database.Fetch<dynamic>(sql).Cast<IDictionary<string, object>>().ToList();
检查结果计数后。
(d为IDictionary)。键
返回null。也许我应该提到所有这些都发生在WCF中,但我不认为这有什么区别。我认为这个解决方案会正常工作,但区别在于这个dynamic d
变量是通过PetaPoco从数据库来的。不应该有什么区别。当您将dynamic作为类型参数时,它将返回一个ExpandoObject。您测试过您的解决方案吗?“不应该有什么不同”这句话让人觉得你没有t@Dmitry,在您的问题中,您使用了Single而不是Query.;-)
result.First().Keys.ToDictionary(k => k, k => result.Select(r => r[k].ToString()).ToList());