我有一个工作单位和使用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>,而是在接收器处重写表达式树.更多的工作.