轻轻的扩展了一下IEnumerable<T>
今天用EF写东西玩,觉得IEnumerable里面除了where()、select(),是不是能添加点其他方法呢。
想做就做,F12到方法定义:
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
我似乎知道该怎么做了。现在要实现一个功能,就是要把一个List<Hero>中HeroId小于5的对象,性别显示成女,武力显示成100(吕布不敌女汉子);
public class Hero : DateBaseModelBase
{
[Key]
[DBKey]
[IdentityKey]
public int HeroId { get; set; } public string Name { get; set; } public string Sex { get; set; } public int XiangXing { get; set; } public int WuLi { get; set; } public int ZhiLi { get; set; }
}
给IEnumerable<T>扩展一个DoSomeThing方法。
public static IEnumerable<T> DoSomething<T>(this IEnumerable<T> list, Action<T> exp)
{
foreach (var model in list)
{
exp(model);
}
return list;
} public static IEnumerable<T> DoSomething<T>(this IEnumerable<T> list, Func<T, bool> exp1, Action<T> exp2)
{
foreach (var model in list)
{
if (exp1(model))
{
exp2(model);
} }
return list;
}
然后试着用EF读取数据库
private void button8_Click(object sender, EventArgs e)
{
MyDB db = new MyDB(); var list = db.Hero.Take().DoSomething(a => a.HeroId < , b => { b.Sex = "女"; b.WuLi = ; }).ToList(); //MessageBox.Show(list.ToJson());
dgv1.DataSource = list;
}
最后得到结果
| 2 | 韩信 | 女 | 85 | 100 | 92 | 100 | 73 | 76 | 姓名:韩信 统帅:100 武力:100 智力:92 政治:73 魅力:76 | |
| 3 | 白起 | 女 | 145 | 100 | 70 | 100 | 3 | 39 | 姓名:白起 统帅:100 武力:100 智力:70 政治:3 魅力:39 | |
| 4 | 楽毅 | 女 | 75 | 100 | 92 | 98 | 91 | 92 | 姓名:楽毅 统帅:98 武力:100 智力:92 政治:91 魅力:92 | |
| 5 | 司马懿 | 男 | 31 | 63 | 96 | 98 | 93 | 87 | 姓名:司马懿 统帅:98 武力:63 智力:96 政治:93 魅力:87 | |
| 6 | 周瑜 | 男 | 125 | 71 | 96 | 97 | 86 | 93 | 姓名:周瑜 统帅:97 武力:71 智力:96 政治:86 魅力:93 | |
| 7 | 吴起 | 男 | 25 | 70 | 95 | 97 | 96 | 67 | 姓名:吴起 统帅:97 武力:70 智力:95 政治:96 魅力:67 | |
| 8 | 吕尚 | 男 | 10 | 50 | 100 | 97 | 96 | 90 | 姓名:吕尚 统帅:97 武力:50 智力:100 政治:96 魅力:90 | |
| 9 | 陆逊 | 男 | 122 | 69 | 95 | 96 | 87 | 90 | 姓名:陆逊 统帅:96 武力:69 智力:95 政治:87 魅力:90 | |
| 10 | 曹操 | 男 | 25 | 72 | 91 | 96 | 94 | 96 | 姓名:曹操 统帅:96 武力:72 智力:91 政治:94 魅力:96 | |
| 11 | 岳飞 | 男 | 75 | 91 | 78 | 95 | 31 | 98 | 姓名:岳飞 统帅:95 武力:91 智力:78 政治:31 魅力:98 |
看到前三行没有,成功了。哦也,然后看看生成的SQL代码到底是什么
SELECT TOP (10)
[c].[HeroId] AS [HeroId],
[c].[Name] AS [Name],
[c].[Sex] AS [Sex],
[c].[XiangXing] AS [XiangXing],
[c].[WuLi] AS [WuLi],
[c].[ZhiLi] AS [ZhiLi],
[c].[TongShuai] AS [TongShuai],
[c].[ZhengZhi] AS [ZhengZhi],
[c].[MeiLi] AS [MeiLi]
FROM [dbo].[Hero] AS [c]
也就是说并没有想象的那么智能。这里的扩展方法并不能代替where()的作用。
有时候我们会遇到遮掩的需求,需要对取到的属性做一下修饰,一般都是用Select()方法,但是他返回的就不是原本的类型了。这个时候可以尝试使用这种方式。我又为自己找到了一个新的偷懒方法。
楼主技术不行,不喜勿喷,欢迎高手指点。
轻轻的扩展了一下IEnumerable<T>的更多相关文章
- 扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用
由于在MVC中经常会使用到@Html.DropDownList方法,而该方法接收的是List<SelectListItem> 参数,因此就想着写一个扩展方法,直接把IEnumerable转 ...
- 23.C#Queryable的扩展方法(十二章12.1-12.2)
今天要写的知识还真心有点绕呢,对于第一节的内容,其实是把原先在内存中的数据源,换成了从数据库中提取出来的数据.从代码的使用方式上是一样的,直接跳过,来看看IEnumerable和IQueryable的 ...
- IEnumerable<T>转换为IList<SelectListItem>
扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用 由于在MVC中经常会使用到@Html. ...
- 【细语】C#之扩展方法原理及其使用
1.写在前面 今天群里一个小伙伴问了这样一个问题,扩展方法与实例方法的执行顺序是什么样子的,谁先谁后(这个问题会在文章结尾回答).所以写了这边文章,力图从原理角度解释扩展方法及其使用. 以下为主要内容 ...
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- Java进击C#——应用开发之Linq和EF
本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知 ...
- .NET面试题系列[13] - LINQ to Object
.NET面试题系列目录 名言警句 "C# 3.0所有特性的提出都是更好地为LINQ服务的" - Learning Hard LINQ是Language Integrated Que ...
- .NET面试题系列[12] - C# 3.0 LINQ的准备工作
"为了使LINQ能够正常工作,代码必须简化到它要求的程度." - Jon Skeet 为了提高园子中诸位兄弟的英语水平,我将重要的术语后面配备了对应的英文. .NET面试题系列目录 ...
- 《C#本质论》读书笔记(15)使用查询表达式的LINQ
15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable<string> sel ...
随机推荐
- EtherChannel Cisco 端口聚合详解
冗余连接及其实现 无论什么设备都无法保障运行的绝对稳定性,即使再优秀的产品也无法保证24×7不间断的工作.除去设备或模块损坏.传输线路中断等硬件故障原因以外,还可能由于网络流量过载.任务负荷过大而导致 ...
- 计算n!的位数<Math>
题意:如题目. 方法一:<TLE> * 可设想n!的结果是不大于10的M次幂的数,即n!<=10^M(10的M次方),则不小于M的最小整数就是 n!的位数,对 * 该式两边取对数,有 ...
- 管理Fragments(转)
转:原文链接 http://www.cnblogs.com/mengdd/archive/2013/01/09/2853254.html 管理Fragments FragmentManager 为了管 ...
- aapt: error while loading shared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS64
前阵子在ubuntu上搭载安卓的开发环境(Eclipse+Sdk+Adt),搭载是完成了,但是却出现了该问题: aapt: error while loading shared libraries: ...
- FZU Problem 2028 时空门问题(DFS+优化)
一开始是MLE,后来想到了用vector,化二维为一维,做了这一步优化后,这就是很基础的一个广搜了 #include<iostream> #include<cstdio> #i ...
- Hadoop集群搭建的密钥配置SSH实现机制的配置(2)
[hadoop@weekend110 ~]$ ssh-keygen -t rsa 用来生产密钥对 Generating public/private rsa key pair. Enter file ...
- android复习-AnsyTask
AnsyTask是一种类似Thread+Hander机制的处理耗时操作的类, 通过在UI线程中excute()启动操作, 在AnsyTask中 doInBackground()中处理耗时操作(运行在自 ...
- 10、end关键字和Fibonacci series: 斐波纳契数列
# Fibonacci series: 斐波纳契数列 # 两个元素的总和确定了下一个数 a, b = 0, 1 #复合赋值表达式,a,b同时赋值0和1 while b < 10: print(b ...
- 数据结构录 之 BST的高级应用。
BST就是二叉检索树,或者是二叉排序树,或者叫二叉搜索树等等. BST的平衡问题可以去学习AVL树或者Treap或者Splay这些平衡树. BST的一些高级应用: 1,求BST中比k小的数的个数: 只 ...
- 数据结构录 之 单调队列&单调栈。
队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调 ...