今天用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>的更多相关文章

  1. 扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用

    由于在MVC中经常会使用到@Html.DropDownList方法,而该方法接收的是List<SelectListItem> 参数,因此就想着写一个扩展方法,直接把IEnumerable转 ...

  2. 23.C#Queryable的扩展方法(十二章12.1-12.2)

    今天要写的知识还真心有点绕呢,对于第一节的内容,其实是把原先在内存中的数据源,换成了从数据库中提取出来的数据.从代码的使用方式上是一样的,直接跳过,来看看IEnumerable和IQueryable的 ...

  3. IEnumerable<T>转换为IList<SelectListItem>

    扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用   由于在MVC中经常会使用到@Html. ...

  4. 【细语】C#之扩展方法原理及其使用

    1.写在前面 今天群里一个小伙伴问了这样一个问题,扩展方法与实例方法的执行顺序是什么样子的,谁先谁后(这个问题会在文章结尾回答).所以写了这边文章,力图从原理角度解释扩展方法及其使用. 以下为主要内容 ...

  5. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数

    一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...

  6. Java进击C#——应用开发之Linq和EF

    本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知 ...

  7. .NET面试题系列[13] - LINQ to Object

    .NET面试题系列目录 名言警句 "C# 3.0所有特性的提出都是更好地为LINQ服务的" - Learning Hard LINQ是Language Integrated Que ...

  8. .NET面试题系列[12] - C# 3.0 LINQ的准备工作

    "为了使LINQ能够正常工作,代码必须简化到它要求的程度." - Jon Skeet 为了提高园子中诸位兄弟的英语水平,我将重要的术语后面配备了对应的英文. .NET面试题系列目录 ...

  9. 《C#本质论》读书笔记(15)使用查询表达式的LINQ

    15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable<string> sel ...

随机推荐

  1. ViewPager滑动标签-PagerSlidingTabStrip的使用

    有篇博客写的已经非常详细,所以不再写了.主要在于导入这个Library,导入Library看自己的笔记 博客地址:http://doc.okbase.net/HarryWeasley/archive/ ...

  2. 阿里云资深DBA专家罗龙九:云数据库十大经典案例分析【转载】

    阿里云资深DBA专家罗龙九:云数据库十大经典案例分析 2016-07-21 06:33 本文已获阿里云授权发布,转载具体要求见文末 摘要:本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的&l ...

  3. spring,hibernate配置事务

    1. 新建java project 2. 引入jar 3. src下新建package:com.web.model, com.web.dao, com.web.service, bean.xml 4. ...

  4. 集合问题 离线+并查集 HDU 3938

    题目大意:给你n个点,m条边,q个询问,每条边有一个val,每次询问也询问一个val,定义:这样条件的两个点(u,v),使得u->v的的价值就是所有的通路中的的最长的边最短.问满足这样的点对有几 ...

  5. 【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)

    原文: https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听 ...

  6. 微信公众号系列 --- ionic在IOS的键盘弹出问题

    在使用ionic开发IOS系统微信的时候会有一个苦恼的问题,填写表单的时候键盘会挡住输入框,其实并不算什么大问题,只要用户输入一个字就可以立刻看见输入框了. 可惜的是,有些客户是不讲理的,他才不管这个 ...

  7. Java中的字符串分割 .

    转自 http://blog.csdn.net/yuwenhao0518/article/details/7161059 http://longkm.blog.163.com/blog/static/ ...

  8. 如何给对话框中的控件发送消息呢?Windows消息分类

    以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给 ...

  9. Android网络开发之Volley--Volley基本用法StringRequest(一)

    1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入Request ...

  10. Apache Commons工具集简介(转)

    此文为转帖,原帖地址:http://zhoualine.iteye.com/blog/1770014