返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

LINQ to Entities 实现Lambda 表达式的重构

时间:2016-10-26 21:57来源:知行网www.zhixing123.cn 编辑:麦田守望者

在平时学习和工作的中会遇到一些功能很类似的接口,比如:User  GetByID(string id)和User  GetByAccount(string account)这两个接口,以及 IList<User> SearchWith Name  ( string searchValue),SearchWithDisplayName( string searchValue)这些接口的输入和输入都是完全一样的,只是针对的属性不同。本文的目的就是通过重新构造Lambda表来合并这些高度类似的接口。

一   失败的探索

1.1       关于GetByID和GetByAccount

我初步计划想通过反射来合并这两个接口,代码如下:

这样的代码在运行的时候回报错,就是说EF不知道如何解析这样的Lambda表达式成SQl语句。

1.2       关于SearchWithName和SearchWithDisplayName

我初步计划想通过添加多个contains方法来处理,并通过或运算来合并多个结果,运行结果也是报同样的错误。

二   构造Lambda表达式

2.1       实现GetByID和GetByAccount的合并

我们平时见到的形如x=>x.id==”xxxxxxx”是一个Expression<Func<T, bool>>的对象,可以通过动态构造该对象来实现合并两个接口的目的。

2.1.1      添加扩展方法

为IQueryable<T>添加扩展方法,这样我们在使用Linq的时候就可以很方便调用,代码如下图所示:

2.1.2      方法的实现如下图所示:

2.1.3      调用定义好的扩展方法

调用的过程如下图所示:

2.2       合并SearchWithName和SearchWithDisplayName

2.2.1      添加扩展方法

合并这两个接口的步骤也是添加一个扩展方法,如下图所示:

2.2.2      调用定义好的扩展方法

调用的过程如下图所示:
顶一下
(1)
100%
踩一下
(0)
0%
标签(Tag):C#
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片