Linq To Object——三种委托

简介: Linq To Object——三种委托

Predicate<T>泛型委托用来定义一组条件并确定指定对象是否符合这些条件的方法,其语如下:

 Public delegate bool Predicate<T>(T obj)


 参数说明:


  T:要比较的对象类型


Obj:要按照由此委托表示的方法中定义的条件进行比较的对象。


 返回值:如果符合此委托表示的方法中定义的条件,则为true,否则为false


Action<T>泛型委托用来封装一个方法,该方法只采用一个参数并且不返回值,其语法如下:public delegate void Action<T> (T obj)

参数说明                                                            


T:委托封装的方法的参数类型。


Obj:委托封装的方法的参数


Func<T>泛型委托封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。,其语法格式如下:

 public delegate TResult Func<T, TResult>(T arg);


T:此委托封装的方法的参数类型。


  TResult: 此委托封装的方法的返回值类型。


返回结果:   此委托封装的方法的返回值。例1:查找指定的字符串。


         //声明一个数组并初始化


           string[] strLists = new string[] { "明日科技", "C#编程词典", "C#范例大全" };


           Console.WriteLine("源字符串数组:");


           //使用foreach语句遍历输出


           foreach (string str in strLists)


           {

               Console.Write(str + "  ");


           }


           Console.WriteLine("\n");


           // 第一种写法 使用Lambda表达式查找数组中包含“C#”的字符串


  string[] strList = Array.FindAll(strLists, s => (s.IndexOf("C#") >= 0));


             //第二种写法 使用匿名方法的方式


string[] strList = Array.FindAll(strLists, (s) => { return s.IndexOf("C#") >= 0; });


           Console.WriteLine("查找到的包含“C#”的字符串:");


           //使用foreach语句遍历输出


           foreach (string str in strList)


           {

               Console.Write(str + "  ");


           }


输出结果:


源字符串数组:


明日科技  C#编程词典  C#范例大全



查找到的包含“C#”的字符串:


C#编程词典  C#范例大全


例2:Lambda表达式查找List列表,使用Predicate委托查找年龄大于30的员工。

     class Program


    {

       static void Main(string[] args)


       {

           new Program().PredicateDelegate();//调用自定义方法显示信息


       }


       public void PredicateDelegate()


       {

           List<User> P_List_user = new List<User>();//创建泛型集合


           //为泛型集合赋值


           P_List_user.Add(new User() { Name = "小刘", Age = 33, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小王", Age = 30, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小赵", Age = 32, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小吕", Age = 30, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小房", Age = 31, Pay = 5000 });


           string P_Str = string.Empty;//定义一个字符串变量,用来记录输出信息


          //第一种实现方式:匿名方法


List<User> P_List_temp = P_List_user.FindAll(//在泛型集合中查找


               (pp) =>//定义匿名方法


               {

                   return pp.Age > 30;//指定查找条件


               });


//第二种实现方式:Lambda表达式,Predicate委托实现


    List<User> P_List_temp = P_List_user.FindAll(pp => pp.Age > 30);


//第一种实现方式:定义匿名方法


           P_List_temp.ForEach(//遍历查询结果


               (pp) =>                {

                   //记录查找到的信息


                   P_Str += "姓名:" + pp.Name + "   年龄:" +pp.Age.ToString() + Environment.NewLine;


               });


//第二种方式:Lambda表达式


P_List_temp.ForEach(pp=>Console.WriteLine(pp.Name));


           Console.WriteLine(P_Str);//输出信息


           Console.ReadLine();


       }


       class User


       {

           public string Name { get; set; }//自动实现名称属性


           public int Age { get; set; }//自动实现年龄属性


           public double Pay { get; set; }//自动实现薪资属性


           public override string ToString()


           {

               return string.Format(



同理计算员工工资的总和:


Double pay=P_List_user.Sum((pp)=>{return pp.Pay;});


                   "姓名:{0}  年龄:{1}  工资:{2}", Name, Age, Pay);//对信息进行格式化



           }


       }


}


目录
相关文章
|
存储 SQL 开发框架
Linq To Object标准操作符最强总结
Linq To Object标准操作符最强总结
114 0
|
SQL 存储 .NET
一起谈.NET技术,使用LINQ Expression构建Query Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
950 0
|
SQL 存储 .NET
使用LINQ Expression构建Que“.NET研究”ry Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
967 0
|
.NET C# 开发框架
|
.NET
Linq to Object实现分页获取数据
最后调用的CSharp代码可以是: int totalcount = dboperator.Customers.Count(); //总记录数 int pagesize = 100;//每页显示数 ...
730 0
|
SQL .NET
LINQ&EF任我行(二)--LinQ to Object (转)
(原创:灰灰虫的家http://hi.baidu.com/grayworm)LinQ to Objects是LinQ家庭的核心,其它的LinQ也使用了与LinQ to Objects相同的查询句法。最终编译器都是把LinQ句法翻译成扩展方法的链式表达式,同时把扩展方法中的lambda表达式转换成匿名类中的匿名方法,然后再把查询表达式编译成MSIL。
1114 0
|
7月前
|
Java
【面试题精讲】Object类的常见方法有哪些?
【面试题精讲】Object类的常见方法有哪些?
|
8月前
|
Java API 开发工具
Java之API详解之Object类的详细解析(下)
Java之API详解之Object类的详细解析(下)
40 0
|
2天前
|
C#
c# 所有类的最终基类:Object
c# 所有类的最终基类:Object
4 0