Linq到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,

Linq to SQL,其中扩展方法将以下内容作为参数:

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);
}