为IEnumerable接口添加增删查等操作
来源:互联网 发布:grub2手动引导ubuntu 编辑:程序博客网 时间:2024/05/01 05:35
为IEnumerable接口添加增删查等操作,原因是IEnumerable导航属性更放心.
对EF开发来说,导航属性肯定都用过,事实上,它是由VS IDE工具根据你的数据库关系结构自动生成的外键属性,在类视图中可以看到相关属性,它是以外键表名来标识的,如果是一对多的关系,那么,它会为属性加上ICollection泛型集合用来标识,而今天我们要说的当然不是自动生成的,而是手动加的属性,这样属性需要我们手动进行join,然后把它按需赋值,而使用include当然是无效的,呵呵。
一般地,我们习惯上把集合属性定义为List<T>,但是,对于linq to entities来说,这个东西并不是很受欢迎,而标准结果集大家都知道是IEnumerable<T>,它是所有集合的基类,自身只提供了集合遍历的方法,这也是我们不用它作为导航属性的原因,因为我们一般需要为导航集合赋值的,而使用IEnumerable赋值就比较麻烦,需要借助List等集合。
引入IEnumerable的原因主要是List无法实现一个复杂的查询,如图:
这个查询返回一个派生类型,下面的复杂查询将会用到上面的结果,而这时,List类型的导航属性将是不被允许的
我们通过监视器可以看到,查询返回的默认是IEnumerable,所以,我们要属性改为IEnumerable,结果当然是正常的
而我们之前不用IEnumerable的原因,就是因为它的方法太单调了,没有添加,移除,查找等方法,而这时,不用它又不行,所以,只能把它进行扩展了,呵呵
扩展方法如下:
/// <summary> /// IEnumerable接口的扩展方法,支持它的实现类是List的情况 /// </summary> public static class IEnumerableExtensions { /// <summary> /// 向集合中添加元素 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="collection"></param> /// <param name="value"></param> public static void Add<T>(this IEnumerable<T> collection, T value) { (collection as List<T>).Add(value); } /// <summary> /// 从集合中删除元素 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="collection"></param> /// <param name="value"></param> public static void Remove<T>(this IEnumerable<T> collection, T value) { (collection as List<T>).Remove(value); } /// <summary> /// 检索集合中是否包含某个元素 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="collection"></param> /// <param name="value"></param> /// <returns></returns> public static bool Contains<T>(this IEnumerable<T> collection, T value) { return (collection as List<T>).Contains(value); } }
调用也是十分简单,和List类型的一样样,呵呵,舒服!
- 为IEnumerable接口添加增删查等操作
- mysql常用增删改查等操作
- cocos2dx sqllite 增删查改等操作
- 链表<list>的增删查等操作
- jQuery实例--Ajax信息的增删改查等操作
- SQL Server 增删改查等操作及举例
- mongodb的增删查改等常用操作
- 实现对HDFS增删改查CRUD等操作
- String深拷贝、比较及增删查改等操作
- 初识Mybatis框架,实现增删改查等操作
- 单链表的增删查改等操作实现
- Dao接口实现基本的数据库操作。增删改查
- CoreData增删改查简单操作及多线程添加数据
- CoreData增删改查简单操作及多线程添加数据
- 增删查改操作
- IEnumerable接口
- IEnumerable接口
- IEnumerable 接口
- android 上传图片
- UITableView分割线样式与颜色
- 【记录】cygwin下折腾个人配置环境
- 用C语言获取任意文件的长度(可能大于2GB)
- Flex中的Bindable的用法
- 为IEnumerable接口添加增删查等操作
- 以log(n)的时间求矩形内的点
- 关于HASH和MD5
- lazarus连接access数据库
- 九步确定你的人生目标和制定达到目标的计划
- iptables 防火墙
- 2.Dynamic Programming on Stolen Values【dp】
- snprintf拷贝字符串
- Iphone 手机助手 Plist 文件详解 (二)