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#
https://msdn.microsoft.com/en-us/library/bb397687.aspx
巧用Expression表达式 解决类似于sql中 select in 的查询(适合于中小型项目)
。
时间: 2024-10-13 15:02:20