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. homebrew的安装与使用

    homebrew的安装:http://jingyan.baidu.com/article/fec7a1e5ec30341190b4e7e5.html 引用segfaultment上面的回答 没这个说法 ...

  2. Linux Change The I/O Scheduler For A Hard Disk

    ow do I change the I/O scheduler for a particular hard disk without rebooting my Linux server system ...

  3. [转载]amba_device使用分析

    什么是AMBA? ---AMBA是一个片内总线规范. ARM官网的介绍:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0 ...

  4. ITextSharp Table使用 (转)

    原文:http://www.cnblogs.com/LifelongLearning/archive/2011/05/16/2048116.html 表格是我们在制作文档时,经常使用的一个元素.对布局 ...

  5. PHP获取路径

    //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br>"; #jiqing.nikon.com echo 'http://'.$_SE ...

  6. mysql字符类型

    字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定 ...

  7. linux 挂载硬盘

    fdisk -l mkfs.ext4 /dev/vdb mkdir /data mount -t ext4 /dev/vdb /data 编辑/etc/fstab /dev/vdb /data ext ...

  8. Three.js加载gltf模型

    效果图 demo import './index.css'; var stats; stats = new Stats(); document.body.appendChild( stats.dom ...

  9. 一个电脑同时运行 64bit 和 32bit 的eclipse 如何匹配 jdk环境

    一个电脑同时运行 64bit 和 32bit   的  eclipse 如何匹配 jdk环境 1 eclipse 分 64bit 和 32bit 两种.  64bit的eclipse 只能搭配 64b ...

  10. Python字符串笔录

    python字符串操作实方法,包括了几乎所有常用的python字符串操作,如字符串的替换.删除.截取.复制.连接.比较.查找.分割等 1.去空格及特殊符号 >>> s = '123 ...