zoukankan      html  css  js  c++  java
  • Lambda表达式 和 Expression<T>

    经常用的Lambda表达式 返回的是  Expression<T> 格式

     public class ActivityService
        {
            private readonly List<Activity> _source = new List<Activity>();
    
            public ActivityService()
            {
                _source.Add(new Activity() 
                { 
                    Id = "5656d551d430520e100fa4f5"  ,
                    Name="奥运会"
                });
                _source.Add(new Activity()
                {
                    Id = "d702abd8",
                    Name = "亚运会"
                });
                _source.Add(new Activity()
                {
                    Id = "706b0ba267a9",
                    Name = "美洲杯"
                });
    
                _source.Add(new Activity()
                {
                    Id = "47d6",
                    Name = "世界杯"
                });
                _source.Add(new Activity()
                {
                    Id = "4a8d",
                    Name = "大运会"
                }); 
                _source.Add(new Activity()
                {
                    Id = "acdb",
                    Name = "欧洲杯"
                });
            }
    
            public Activity GetOne(Expression<Func<Activity, bool>> where)
            {
                var func = where.Compile();
                return _source.FirstOrDefault(o => func(o));
    
            }
        }
    

      

      public class Activity
        {
            public string Id { get; set; }
            public string Name { get; set; }
    
        }
    

      

    调用方式如下:

    class Program
        {
            static void Main(string[] args)
            {
                ActivityService service=new ActivityService();
                string id = string.Empty;
                string name = "大运会";
    
                //表达式不支持语句块
                Expression<Func<Activity, bool>> expression =
                    (Activity a) => string.IsNullOrEmpty(id) ? a.Name == name : a.Id == id;
    
                //如果需要语句块 可以直接使用委托,然后有2种方法 (1)将其封装到Excepression (2)直接使用Lambda表达式
                Func<Activity, bool> func = (a) =>
                {
                    if (!string.IsNullOrEmpty(id))
                        return a.Id == id;
                    return a.Name == name;
                };
                //expression = (Activity a) => func(a);
                //或者直接在下面使用Lambda
                var activity2 = service.GetOne( (a)=>func(a));
    
                var activity = service.GetOne(expression);
                Console.Read();
            }
        }
    

      

  • 相关阅读:
    hdu1556 Color the ball
    HDU
    《解读window核心编程》 之 字符和字符串处理方式
    WebService之CXF注解之四(測试类)
    gdal以GA_Update方式打开jpg文件的做法
    贪吃蛇源代码分析
    极光消息推送服务器端开发实现推送(上)
    2014,为了梦想宁愿破釜沉舟
    小强的HTML5移动开发之路(37)——jqMobi快速入门
    你可能不知道的5种 CSS 和 JS 的交互方式
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/5672928.html
Copyright © 2011-2022 走看看