C# 转换列表<;对象>;到字典<;propertyname、propertyvalue>;
我正在尝试将数据库结果转换为类型为Property name、Property value的字典C# 转换列表<;对象>;到字典<;propertyname、propertyvalue>;,c#,c#-4.0,dictionary,C#,C# 4.0,Dictionary,我正在尝试将数据库结果转换为类型为Property name、Property value的字典 IEnumerable<image> results = Entity.GetAllContent<image>(); Dictionary<string, object> dict = results.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
IEnumerable<image> results = Entity.GetAllContent<image>();
Dictionary<string, object> dict =
results.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public).ToDictionary(
prop => prop.Name, prop => prop.GetValue(results, null));
IEnumerable results=Entity.GetAllContent();
字典格言=
results.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public).ToDictionary(
prop=>prop.Name,prop=>prop.GetValue(结果,null));
line Entity.GetAllConent只是ormlite select的重载。通常,这将返回多个对象的通用列表(图像)。但是,当我尝试执行上述代码时,它就像是尝试将列表或IEnumerable转换为字典,而不是转换基类型
我得到以下例外情况:
Parameter count mismatch.
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at Web.Controllers.HomeController.<>c__DisplayClass3.b__1(PropertyInfo prop) in d:\projects\lovelife\Web\Controllers\HomeController.cs:line 33
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
at Web.Controllers.HomeController.Test() in d:\projects\lovelife\Web\Controllers\HomeController.cs:line 31
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.b__41()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.b__49()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.b__36(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.b__20()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.b__22(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.<>c__DisplayClass1d.b__18(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.b__3(IAsyncResult ar)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.b__3(IAsyncResult ar)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.b__3(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.b__3(IAsyncResult ar)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
参数计数不匹配。
位于System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(对象对象对象、BindingFlags invokeAttr、绑定器、对象[]参数、CultureInfo区域性)
在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性)
位于System.Reflection.RuntimePropertyInfo.GetValue(对象obj、BindingFlags invokeAttr、Binder Binder、对象[]索引、CultureInfo区域性)
位于System.Reflection.RuntimePropertyInfo.GetValue(对象obj,对象[]索引)
在Web.Controllers.HomeController.c\uu中,在d:\projects\lovelife\Web\Controllers\HomeController.cs:第33行中显示Class3.b\uuu 1(PropertyInfo属性)
在System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1源,Func`2键选择器,Func`2元素选择器,IEqualityComparer`1比较器)
在System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source,Func`2 keySelector,Func`2 elementSelector)
在d:\projects\lovelife\Web\Controllers\HomeController.cs中的Web.Controllers.HomeController.Test()处:第31行
在lambda_方法中(闭包、控制器基、对象[])
位于System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object[]参数)
位于System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary`2参数)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor,IDictionary`2参数)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass42.b__41()中
在System.Web.Mvc.Async.AsyncResultRapper.c_uuu显示类8`1.b_uuu7(IAsyncResult)
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_uuDisplayClass37.c_uuDisplayClass39.b_u33()中
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass4f.b__49()中
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass37.b__36(IAsyncResult asyncResult)
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_uuDisplayClass25.c_uuDisplayClass2A.b_u20()中
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass25.b__22(IAsyncResult asyncResult)
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
在System.Web.Mvc.Controller.c__;u displayClassId.b__u18(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncResultRapper.c__DisplayClass4.b__3(IAsyncResult ar)中
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncResultRapper.c__DisplayClass4.b__3(IAsyncResult ar)中
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
在System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)上
位于System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
在System.Web.Mvc.MvcHandler.c_uuu显示class8.b_uuu3(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncResultRapper.c__DisplayClass4.b__3(IAsyncResult ar)中
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
在System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.EndProcessRequest中(IAsyncResult结果)
在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()中
在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)
没有提供内部异常。我不确定这将如何工作。您有一个相同类型对象的列表(
image
)。每一个都将具有相同的属性(可能是Id、名称等)。你打算怎么把它们都放在一本字典里?每一个都有重复的密钥。您需要重写它来创建一个字典列表,每个元素一个
var dictionaries = results.Select(x => x.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
.ToDictionary(prop => prop.Name, prop => prop.GetValue(x, null)))
.ToList();
这是因为我试图使用dotliquid,但那里的开发人员没有回答任何问题,也没有提供真实的案例。我必须通过字典,但是液体模板代码允许循环/for-each。因此,我需要一个收藏。我知道你在说什么,这是我同样认为的问题,他们想要一本同一类的多个实例的字典是毫无意义的???你一定对他们想要什么感到困惑。物理上不可能有一本钥匙相同的字典。是的,特雷弗,我的想法也一样,只是需要检查一下,不是我遗漏了一些巫毒之类的东西。我认为在这种情况下,我必须用List值将我的列表包装在一个holding类中,然后将该包装作为一个请求发送。液态