Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PetaPoco-动态类型中的属性名称_C#_Dynamic_Reflection_Petapoco - Fatal编程技术网

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());