Linq到SQL何处扩展方法问题
Linq to SQL,其中扩展方法将以下内容作为参数:Linq到SQL何处扩展方法问题,linq,linq-to-sql,Linq,Linq To Sql,Linq to SQL,其中扩展方法将以下内容作为参数: Expression<Func<Table,bool>> predicate 表达式谓词 有人能简单地描述一下这句话的确切含义吗?我想创建一个方法,它接受其中的一个,可以传递到L2S查询,我想确切地了解它是什么,以及应该如何调用它 谢谢。我只是简单地解释一下表达式是如何工作的。在给出的示例代码中,有一个示例- System.Linq.Expressions.Expression<Func<int,
Expression<Func<Table,bool>> predicate
表达式谓词
有人能简单地描述一下这句话的确切含义吗?我想创建一个方法,它接受其中的一个,可以传递到L2S查询,我想确切地了解它是什么,以及应该如何调用它
谢谢。我只是简单地解释一下表达式是如何工作的。在给出的示例代码中,有一个示例-
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));
//OUTPUT : deleg2(4) = True
int[] i={1,2,3,4,5}
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
var result=i.Where(expr);//equivalent to i.Where(c=>c<5)
在本例中,您有一个表作为参数,因此它将接受一个表对象并返回bool
List<Employee> e= new List<Employee>();
e.Add(new Employee(1,"ABC",5000));
e.Add(new Employee(2,"ACC",5000));
e.Add(new Employee(3,"ADC",50009));
System.Linq.Expressions.Expression<Func<Employee, bool>> expr =e => e.Salary < 50000;
var result=e.Where(expr);//give all employee with salary<50000
List e=新列表();
e、 增加(新员工(1名,“ABC”,5000名));
e、 增加(新员工(2名,“ACC”,5000名));
e、 增加(新员工(3名,ADC,50009));
System.Linq.Expressions.expr=e=>e.工资<50000;
var结果=e.Where(expr)//为所有员工提供工资变量类型表达式
意味着它采用表示方法/委托/lambda表达式的代码表达式,该表达式采用表
参数并返回bool
。采用表达式
参数的方法旨在解析代码以生成其他代码,而不是计算表达式
本身。LINQtoSQL可以使用它们生成SQL代码,以实现代码所表示的功能
表达式
参数的奇怪之处在于,将值传递给它们的方式与传递lambda表达式的方式相同,但值是被解释为表达式
还是lambda取决于传递它的方法的签名
下面是一个将表达式
传递到方法中的示例(看起来与传递Func
参数相同:
theMethod(table => table.NumLegs > 3);
// or to be more explicit:
theMethod((Table table) => table.NumLegs > 3);
// or...
theMethod(delegate(Table table) { return table.NumLegs > 3; } );
下面是您如何编写自己的方法,将一个作为参数并将其应用于L2S查询:
IQueryable<Table> addWhereClause(
IQueryable<Table> tables, Expression<Func<Table, bool>> whereClause)
{
return tables.Where(whereClause);
}
IQueryable addwhere子句(
IQueryable表,表达式where子句)
{
返回表。其中(Where条款);
}
做得很好。如果我能多次投票支持你,我会这么做的。
IQueryable<Table> addWhereClause(
IQueryable<Table> tables, Expression<Func<Table, bool>> whereClause)
{
return tables.Where(whereClause);
}