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. java模拟生日发祝福

    1.新建customer表生日都选为当天 所需jar包 2.使用c3p0连接到数据的xml配置文件 3.连接数据库的工具类 package com.cc.birthday; import java.s ...

  2. poj2184

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13578   Accepted: 5503 D ...

  3. 51nod 1001 数组中和等于K的数对【二分查找/排序】

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组 ...

  4. Codeforces Round #445 A. ACM ICPC【暴力】

    A. ACM ICPC time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  5. 1424 零树 (树形DP)

    1424 零树 题意 给出一棵树,每次可以选择一个包含节点 1 的连通块,将所有的节点的权值同时加 1 或减 1 ,问最少多少次操作使所有节点权值变为 0 . 分析 这种题意简单的题目好处就是能很快知 ...

  6. bzoj 1067: [SCOI2007]降雨量

    题目链接: bzoj 1067: [SCOI2007]降雨量 题解: 很简单的一道题,但代码里有许多细节需要注意,切容易出错,调了三个小时OTZ 做一个st表维护区间最大值就 在获得年份在序列中的po ...

  7. 2017 China Collegiate Programming Contest Final (CCPC 2017)

    题解右转队伍wiki https://acm.ecnu.edu.cn/wiki/index.php?title=2017_China_Collegiate_Programming_Contest_Fi ...

  8. 任务驱动,学习.NET开发系列第2篇------单词统计

    一 高效学习编程的办法 1 任务驱动方式学习软件开发 大部分人学习软件开发技术是通过看书,看视频,听老师上课的方式.这些方式有一个共同点即按知识点进行讲解.比如拿c#编程为例,首先是讲解大量的基础概念 ...

  9. 【转】C++调用Matlab的.m文件

    原文地址     Matlab是一个强大的数学计算/仿真工 具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数.但在很多情况下,我们不得不使用VC编程.那么,如何在VC中利用matla ...

  10. 利用jquery.form.js实现将form提交转为ajax方式提交的方法(带上传的表单提交)

    提供一种方法就是利用jquery.form.js. (1)这个框架集合form提交.验证.上传的功能. 核心方法 -- ajaxForm() 和 ajaxSubmit() $('#myForm').a ...