zoukankan      html  css  js  c++  java
  • Dynamic Expression.Call Any

    public class Foo
        {
            public IList<string> Strings { get; set; }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                //Func<Foo, bool> func =
                //    a => a.Strings.Any(b => b == "asdf");
    
                // b => b == "asdf";
                var bParameter = Expression.Parameter(typeof(string), "b");
                var asdfConstant = Expression.Constant("asdf");
                var compare = Expression.Equal(bParameter, asdfConstant);
                var compareExpression = Expression.Lambda<Func<string, bool>>(compare, bParameter);
                var ceCompareExpression = Expression.Constant(compareExpression.Compile());
    
                // a => a.Strings.Any(compareExpression)
                var parameter = Expression.Parameter(typeof(Foo), "foo");
    
                var foosProperty = Expression.Property(parameter, typeof(Foo).GetProperty("Strings"));
                MethodInfo method = typeof(Enumerable).GetMethods().Where(m => m.Name == "Any" && m.GetParameters().Length == 2).Single().MakeGenericMethod(typeof(string));
    
                var anyMethod = Expression.Call(method, foosProperty, ceCompareExpression);
    
                var lambdaExpression = Expression.Lambda<Func<Foo, bool>>(anyMethod, parameter);
    
                // Test.
                var foo = new Foo { Strings = new List<string> { "asdf", "fdsas" } };
    
                //Console.WriteLine(string.Format("original func result: {0}", func(foo)));
                Console.Write(string.Format("constructed func result: {0}", lambdaExpression.Compile()(foo)));
    
                Console.ReadKey();
            }
        }
  • 相关阅读:
    Fire and Motion[转载]
    HLSL2GLSL v0.9 Released
    CEGUI Release of 0.5.0 stable by CrazyEddie 6th November 2006
    MapInfo 连接Oracle
    MapInfo连接SQLServer
    视图的创建及使用(sql server 2005)
    MapInfo 建立永久表
    MapInfo Update Feature
    MapInfo导入.TAB和.mws的方法
    触发器的创建及使用(sqlserver 2000)
  • 原文地址:https://www.cnblogs.com/zcm123/p/4942046.html
Copyright © 2011-2022 走看看