c# – 帮我理解“LINQ to Entities只支持转换Entity Data Model原始类型”

前端之家收集整理的这篇文章主要介绍了c# – 帮我理解“LINQ to Entities只支持转换Entity Data Model原始类型”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个工作单位和使用EF 4和POCO的仓库.由于EF需要一个有序集才可以跳过()和Take(),我添加了以下单元测试(没有mocks)只是为了拉出一个记录,看看它是否有效.
var myList = UOW.EntityRepo.Get( orderbyLambda: p => p.ID,page: 1,pageSize: 1);

这导致order byLambda = {p =>转换(p.ID)}和枚举期间的错误. ID是一个tinyint(Int16 / short)

那么为什么不能通过ID来排序?更多关于错误

无法将类型“System.Int16”转换为键入“System.Object”.

我将order byLine定义为表达式< Func< E,对象>> orderbyLambda

编辑:

真正的杀手是我这样做:

orderbyLambda:  p => new { p.ID }

它的作品…为什么?

解决方法

发现“对象”命令和恐慌;它知道如何通过字符串,int,short,DateTime等进行排序 – 但是对象有点太模糊.

您将需要正确键入实际的lambda;最简单的方法是使Get通用,即

.... Get<TIdentity>(
         Expression<Func<E,TIdentity>> orderbyLambda,int page,int pageSize)

接着:

orderbyLambda: p => p.ID

应该(没有你改变调用者的代码),在这种情况下通过泛型类型推断自动使得Get< short>(…).另一个选项是将其保留为< E,object>,而是在接收器处重写表达式树.更多的工作.

猜你在找的C#相关文章