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

Lambda Expression in C#的更多相关文章

  1. hdu 1031 (partial sort problem, nth_element, stable_partition, lambda expression) 分类: hdoj 2015-06-15 17:47 26人阅读 评论(0) 收藏

    partial sort. first use std::nth_element to find pivot, then use std::stable_partition with the pivo ...

  2. Part 99 Lambda expression in c#

    class Program { static void Main(string[] args) { List<Person> persons = new List<Person> ...

  3. 浅析Java 8新特性Lambda Expression

    什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...

  4. Lambda Expression

    Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口.下面这个例子就是使用Lambda语法来代替匿名的内部类 ...

  5. Variable used in lambda expression should be final or effectively final

    Lambda与匿名内部类在访问外部变量时,都不允许有修改变量的倾向,即若: final double a = 3.141592; double b = 3.141592; DoubleUnaryOpe ...

  6. JDK 8 - Lambda Expression 的优点与限制

    我们知道 JDK 8 新增了 Lambda Expression 这一特性. JDK 8 为什么要新增这个特性呢? 这个特性给 JDK 8 带来了什么好处? 它可以做什么?不可以做什么? 在这篇文章, ...

  7. 关于 lambda expression 返回值的类型转换

    lambda expression(lambda 表达式,$\lambda$ 表达式) 是 C++ 11 引入的特性. 一般而言,lambda 表达式的返回值类型可不指定,而由返回值推断. 需要注意的 ...

  8. C++ lambda expression

    Emerged since c++11, lambda expression/function is an unnamed function object capable of capturing v ...

  9. 三元運算子回傳lambda expression

    紀錄一下 假如我想要透過三元運算子?: 傳回lambda expression 要明確轉型

随机推荐

  1. WebBrowser(超文本浏览框)控件默认使用IE9,IE10的方法

    C#和易语言都可以使用该方法来变更默认的的IE版本 该文是通过修改注册表的方法实现,测试的时候发现易语言本身也是采用的这种方法 操作方法 打开注册表 HKEY_LOCAL_MACHINE (or HK ...

  2. 【linux高级程序设计】(第十一章)System V进程间通信 4

    共享内存 共享内存主要用于实现进程间大量数据传输. 共享内存的数据结构定义: 系统对共享内存的限制: 共享内存与管道的对比: 可以看到,共享内存的优势: 1.共享内存只需复制2次,而管道需要4次 2. ...

  3. nagios部署+短信和邮件报警

    操作系统 CentOS6.6  服务端:10.0.0.20 客户端:10.0.0.50 一.nagios的服务端安装部署 1.nagios安装 [root@manager src]# rzrz wai ...

  4. 使用bottle进行web开发(2):http request

    我们知道,http request有多个方法,比如get,post,delete,patch,put等.对用的,bottle都定义了相应的装饰器,目前定义了五个: get(),post(),put() ...

  5. Curl请求方法封装

    /** * GET请求 * @param $url * @return bool|mixed */ function http_get($url) { $oCurl = curl_init (); i ...

  6. laravel按月/时间区间查询数据

    public function payRollList($time) { $member_phone = Session::get(phone'); $engineer = Engineer::get ...

  7. 计蒜客 17119.Trig Function-切比雪夫多项式+乘法逆元 (2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F)

    哈哈哈哈哈哈哈哈哈哈哈哈,终于把这道题补出来了_(:з」∠)_ 来写题解啦. _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ 哈哈哈哈哈哈,从9月16日打了这 ...

  8. HDU 5900 QSC and Master (区间DP)

    题目链接   http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意:给出序列$A_{i}.key$和$A_{i}.value$,若当前相邻的两个数$A_{ ...

  9. thymeleaf初步使用

    thymeleaf模板引擎初步使用 #thymelea模板配置 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffi ...

  10. 树链剖分【p2590】[ZJOI2008]树的统计

    Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. ...