Zac*_*ott 10 c# entity-framework-4
我有一个工作单元和一个使用EF 4和POCO的存储库.由于EF在Skip()和Take()之前需要一个有序集,我添加了以下单元测试(没有模拟)只是为了拉出一条记录来查看它是否有效.
var myList = UOW.EntityRepo.Get( orderbyLambda: p => p.ID, page: 1, pageSize: 1);
Run Code Online (Sandbox Code Playgroud)
这导致orderbyLambda = {p => Convert(p.ID)}枚举期间的表达和错误.ID是tinyint(Int16 /短)
那么为什么ID无法订购呢?更多关于错误的信息
Unable to cast the type 'System.Int16' to type 'System.Object'.
我将orderbyLambda定义为 Expression<Func<E, object>> orderbyLambda
编辑:
真正的杀手是如果我这样做:
orderbyLambda: p => new { p.ID }
Run Code Online (Sandbox Code Playgroud)
它有效...为什么?
Mar*_*ell 15
它正在发现"按{object}排序"并恐慌; 它知道如何订购string,int,short,DateTime,等-但object有点太含糊.
你需要正确输入实际的lambda; 最简单的方法是制作Get通用的,即
.... Get<TIdentity>(
Expression<Func<E, TIdentity>> orderbyLambda, int page, int pageSize)
Run Code Online (Sandbox Code Playgroud)
然后:
orderbyLambda: p => p.ID
Run Code Online (Sandbox Code Playgroud)
应该(在没有你更改调用者的代码的Get<short>(...)情况下)通过泛型类型推断在这种情况下自动生成a .另一种选择是将其保留为<E,object>,但在接收器处重写表达式树.更多的工作.
| 归档时间: |
|
| 查看次数: |
7050 次 |
| 最近记录: |