• Lambda Expression in C#


    1、Expression

        Expression<Func<double, double>> exp = a => Math.Sin(a);

        委托类型Func<double, double>,它限定生成的表达式树是一个接受double,并返回double的一元Lambda函数

     <Func<double, double, double, double, double> 输入参数为4个double,返回一个double类型
      static void Main(string[] args)
        {
            Expression<Func<double, double, double, double, double>> myExp =
                (a, b, m, n) => m * a * a + n * b * b;
    
            var calc = new BinaryExpressionCalculator(myExp);
            Console.WriteLine(calc.Calculate(1, 2, 3, 4));
        }

    2、在linq to sql中的使用

         LoadWith方法,输入类型为泛型T,输入参数为Expression,返回System.Linq.Expressions.LambdaExpression

         LoadsWith方法,接受LambdaExpression[],加载数据

      <Func<T, object> 输入泛型,返回object(因为返回类型未定,所以为object)
        public partial class Db   //为Db.dbml文件的partial class 
        {

            public static LambdaExpression LoadWith<T>(Expression<Func<T, object>> expression)
            {
                return expression;
            }
           
            public void LoadsWith(params LambdaExpression[] expressions)
            {
                var dlo = new DataLoadOptions();
                foreach (var expression in expressions)
                {
                    dlo.LoadWith(expression);
                }
                LoadOptions = dlo;
            }

               public static Db Open(bool readOnly = false) {

          var db = new Db();

          if (readOnly) db.ObjectTrackingEnabled = false;

           return db;

        }
        }

    MSDN上对LoadWith的解释是:通过使用 lambda 表达式检索与主目标相关的指定数据。 LoadWith可以用一个sql语句加载相关表的数据

    例如Student表inner join Class表,这就是LoadWith的意义所在。

    调用:

     using (var db = Db.Open()) {
    
            db.LoadsWith(
              Db.LoadWith<Project>(p => p.Client), 
              Db.LoadWith<Project>(p => p.Files)
            );
    
            var project = db.Projects.SingleOrDefault(p => p.Id == form.Id);
    }

    Exploring Lambda Expression in C#

    Expression Tree上手指南

    https://msdn.microsoft.com/en-us/library/bb397687.aspx

    巧用Expression表达式 解决类似于sql中 select in 的查询(适合于中小型项目)

    linq to sql

  • 相关阅读:
    按照两种模式排序用户列表
    WINDOWS系统属性符号说明
    一个无敌删除命令
    SQL判断某列中是否包含中文字符、英文字符、纯数字
    泰勒公式的发现以及证明
    陶哲轩实分析 引理7.1.4 证明
    多项式函数在某一点处的泰勒展开
    域上多项式的带余除法
    陶哲轩实分析 命题7.18 证明
    陶哲轩实分析 引理7.1.4 证明
  • 原文地址:https://www.cnblogs.com/xiaochun126/p/4708292.html
Copyright © 2020-2023  润新知