using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication8
{
public static class ListExt
{
public delegate bb MyFunc<in T, out bb>(T arg);
public static List<T> MyWhere<T>(this List<T> list, MyFunc<T,bool> whereLambada )
{
List<T> myList=new List<T>();
foreach (T obj in list)
{
if (whereLambada(obj))
{
myList.Add(obj);
}

}
return myList;

}
}

public class Student
{

public int No { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}

class Program
{
static void Main(string[] args)
{
//TestDb2Entities1 DbContext = new TestDb2Entities1();

//var stu = (from s in DbContext.UserInfoSets where s.Id == 1 select s).First();
//RoleInfoSet r = stu.RoleInfoSets.ToList()[0];
//DataTable table=new DataTable();
//var t = from s in table.AsEnumerable() group s by s.Field<Int32>("") into g select g;

DataTable table = new DataTable();
table.Columns.Add("Id", typeof(Int32));
table.Columns.Add("Name", typeof(String));
table.Columns.Add("Age", typeof(Int32));

DataRow row = table.NewRow();
row["Id"] = 1;
row["Name"] = "1";
row["Age"] = 10;
table.Rows.Add(row);

row = table.NewRow();
row["Id"] = 2;
row["Name"] = "2";
row["Age"] = 2;
table.Rows.Add(row);

row = table.NewRow();
row["Id"] = 1;
row["Name"] = "3";
row["Age"] = 3;
table.Rows.Add(row);

//var stus = from s in table.AsEnumerable() group s by s.Field<Int32>("Id") into g select
//new {
// key=g.Key,value=g
//}
//;

var stus = from s in table.AsEnumerable()
where s.Field<Int32>("Id") == 1
group s by s.Field<Int32>("Id")
into g
select g;

var list = stus.ToList();
var c = list[0].ToList()[1].Field<Int32>("Age");

List<Student> stuList=new List<Student>();
stuList.Add(new Student() { No = 1,Name = "2",Age = 1});
stuList.Add(new Student() {No = 2,Name = "2",Age = 3});

var data = stuList.MyWhere(x => x.No == 1);

Console.ReadKey();

}
}
}

复习扩展方法 涉及委托,这里我使用自定义委托类型 public delegate bb MyFunc<in T,out bb> (T arg)的更多相关文章

  1. .net 扩展方法,lamada表达式 委托

    扩展方法 (1)扩展方法是一种特殊的静态方法,它定义在一个静态类中,但可以在其他类的对象上向调用实例方法那样进行调用.因此,通过扩展方法,我们就可以在不修改一个类型的前提下对一个类型进行功能上的扩充, ...

  2. .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

    开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...

  3. 从扩展方法到匿名方法再到LINQ

    1.首先我们应该知道什么是扩展方法: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

  4. C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

    1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢 ...

  5. 用LinQ扩展方法,泛型扩展方法,实现自定义验证字符是否空、对象是否为null,及泛型约束使用,Action的使用

    一.Linq扩展方法 1.扩展方法必须是静态方法.扩展方法所在的类必须是静态类 2.扩展方法里面的参数必须制定this关键字,紧跟需要扩展的类型,如下: 二.泛型约束 1.使用泛型的原因,是在不知道需 ...

  6. C#编程(六十一)------------LINQ中的扩展方法

    原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...

  7. 21扩展IEnumerable<T>泛型接口自定义LINQ的扩展方法

    LINQ方法实际上是对IEnumerable<TSource>的扩展,如图:   本篇自定义一个MyWhere方法,达到与Where相同的效果.     使用LINQ自带的Where方法 ...

  8. 【转载】C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

    1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢 ...

  9. C#3.0新增功能04 扩展方法

    连载目录    [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型 ...

随机推荐

  1. 剑指offer-第六章面试中的各项能力之总结

  2. Linq:Grouping Operators

    [Category("Grouping Operators")] [Description("This sample uses group by to partition ...

  3. UVA10652 Board Wrapping

    题意 PDF 分析 就是一个裸的凸包. 如何确定点?就用中心向四边连垂直的向量然后旋转,加上中心点,即可得出旋转后的点. 时间复杂度\(O(T n \log n)\) 代码 #include<i ...

  4. 如何在本地浏览器访问nginx

    1.打开vmware"编辑虚拟机"设置,点击“网络适配器”选择“桥联模式”: 2.开启该虚拟机,输入用户名root及密码登陆服务器: 3.以管理员身份打开cmd,在命令窗口输入ip ...

  5. 一分钟理解js闭包

    什么是闭包?先看一段代码: ? 1 2 3 4 5 6 7 8 9 10 function a(){   var n = 0;   function inc() {     n++;     cons ...

  6. Six Basic Functional Areas of Spring

  7. NOIp2018 D2T3 defense——树上倍增

    题目:https://www.luogu.org/problemnew/show/P5024 考场上只会写n,m<=2000的暴力,还想了想A1和A2的情况,不过好像只得了A1的分.然后仔细一看 ...

  8. DHCP(四)

    确认阶段:即DHCP服务器确认分配级DHCP客户端IP地址的阶段.某个DHCP服务器在收到DHCP客户端发来的DHCP Request报文后,只有DHCP客户端选择的服务器会进行如下操作:如果确认将地 ...

  9. STM32使用printf丢失第一个字母的问题

    STM32使用printf函数给串口打印信息的执行步骤为: 1.重定向printf函数 给uart.c文件中增加如下函数: //重定向c库函数printf到USART1 int fputc(int c ...

  10. mybatis 动态sql语句(3)

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件判断) 2. ...