【发布时间】:2017-03-30 14:04:43
【问题描述】:
我有这段代码一直在抛出一个转换错误,我不知道为什么在玩了半个小时之后。这是一段代码:
var zips = DB.Get<Partner_to_ZipCode>()
.AsQueryable()
.Include(i => i.Partner)
.Where(w => w.Partner.Id == id)
.Select(s => s.ZipCode)
.ToArray();
它指向控制器的第 146 行,也就是这里的 linq 查询。 “Partner.Id”和“id”一样是一个整数,ZipCode 是一个字符串。我不知道这里发生了什么。我试过注释掉代码片段,强制转换变量,将数组从泛型更改为特定类型,但都没有做任何事情。任何帮助将不胜感激。
错误信息是:
{"message":"发生错误。","exceptionMessage":"从物化 'System.Int32' 类型到 'System.String' 类型的指定转换无效。","exceptionType":"System.InvalidOperationException","stackTrace":" 在 System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader阅读器,Int32 序数)\r\n 在 System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 序数)\r\n 在 System.Data.Entity.Core.Common.Internal .Materialization.Coordinator`1.ReadNextElement(Shaper shaper)\r\n 在 System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()\r\n 在 System.Linq.Buffer `1..ctor(IEnumerable`1 源)\r\n 在 System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 源)\r\n 在 PMP.MVC.Controllers.PartnerController.GetTasks(Int32 id)在 c:\\Users\\maran\\OneDrive\\Documents\\RF\\main\\src\\PMP.MVC\\PMP.MVC\\Controlle rs\\PartnerController.cs:line 146\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass10.b__9(Object instance, Object[ ] methodParameters)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancelToken)\r\n--- 堆栈跟踪从上一个引发异常的位置结束 - --\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter `1.GetResult()\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 堆栈跟踪从上一个引发异常的位置结束 ---\r\ n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext ()\r\n--- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime 处从先前引发异常的位置结束堆栈跟踪。 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n 在 System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext()\r\ n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 在 System.Web.Http.Controllers.ExceptionFilterResult.d__0 .MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.Task System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的 Awaiter.ThrowForNonSuccess(任务任务)\r\n\r\n System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n 的系统。 Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}
【问题讨论】:
-
数据库列类型和实体类型不匹配?
-
将每个 Linq 链分配给一个单独的变量/Linq.Function() 以增加透明度。
-
.Where(w => w.Partner.Id == id) 也许你在那里比较 int 和 string
-
两个id都是整数,实体和db类型匹配。我不知道发生了什么。
标签: c# .net entity-framework linq