加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 帮我理解“LINQ to Entities只支持转换Entity Data Model

发布时间:2020-12-15 06:27:58 所属栏目:百科 来源:网络整理
导读:我有一个工作单位和使用EF 4和POCO的仓库.由于EF需要一个有序集才可以跳过()和Take(),我添加了以下单元测试(没有mocks)只是为了拉出一个记录,看看它是否有效. var myList = UOW.EntityRepo.Get( orderbyLambda: p = p.ID,page: 1,pageSize: 1); 这导致order
我有一个工作单位和使用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>,而是在接收器处重写表达式树.更多的工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读