本文部分摘自《ASP.NET4权威指南》 CustomExpression类来提供可用于QueryExtender控件中的自定义 LINQ 表达式。CustomExpression 类使你能够在应用程序中指定自定义表达式,然后在事件处理程序中调用它。

如果上面的表达式类都不能够满足你的要求,那么你可以通过
下面的示例演示了如何创建一个由 QueryExtender 控件使用的 CustomExpression 对象。其中,该自定义表达式调用包含自定义 LINQ 表达式的 QueryEmployees方法。筛选操作的结果显示在 GridView 控件中。如代码清单10-7所示:
代码清单10-7:CustomExpressionTest.aspx
 
  
  1. <form id="form1" runat="server"> 
  2. <asp:LinqDataSource ID="LinqDataSource1"   
  3. TableName="Employees" runat="server" 
  4.  ContextTypeName="_10_2.EmployeesDataContext" 
  5.  EntityTypeName="" Select="new (employeeid, employeename,  
  6.  department, address, email, workdate)"> 
  7. </asp:LinqDataSource> 
  8. <asp:QueryExtender ID="QueryExtender1" runat="server" 
  9.  TargetControlID="LinqDataSource1"> 
  10.     <asp:CustomExpression OnQuerying="QueryEmployees"> 
  11.     </asp:CustomExpression> 
  12. </asp:QueryExtender> 
  13. <asp:GridView ID="GridView1" runat="server" Width="100%" 
  14.  DataSourceID="LinqDataSource1" 
  15.   AllowPaging="True" AutoGenerateColumns="False"   
  16. DataKeyNames="employeeid"> 
  17.     <Columns> 
  18.         <asp:BoundField DataField="employeeid" HeaderText="编号" 
  19.  ReadOnly="True" SortExpression="employeeid" /> 
  20.         <asp:BoundField DataField="employeename" HeaderText="姓名" 
  21.  SortExpression="employeename" /> 
  22.         <asp:BoundField DataField="department" HeaderText="部门" 
  23.  SortExpression="department" /> 
  24.         <asp:BoundField DataField="address" HeaderText="住址" 
  25.  SortExpression="address" /> 
  26.         <asp:BoundField DataField="email" HeaderText="邮箱"   
  27. SortExpression="email" /> 
  28.         <asp:BoundField DataField="workdate" HeaderText="工作时间" 
  29.  SortExpression="workdate" /> 
  30.     </Columns> 
  31. </asp:GridView> 
  32. </form> 
 
  在上面的代码中,通过CustomExpression对象的OnQuerying属性指定了自定义 LINQ 表达式的 QueryEmployees方法。其中,后台的自定义 LINQ 查询的事件处理程序QueryEmployees代码如下所示:CustomExpression对象的OnQuerying属性指定了自定义 LINQ 表达式的 QueryEmployees方法。其中,后台的自定义 LINQ 查询的事件处理程序QueryEmployees代码如下所示:
在上面的代码中,通过
 
  
  1. protected void QueryEmployees(object sender,  
  2.  CustomExpressionEventArgs e)  
  3. {  
  4.     e.Query = from p in e.Query.Cast<Employee>()  
  5.                 where p.employeeid >= 5  
  6.                 select p;  
  7. }   

 示例运行结果图10-26所示:
图10-26:示例运行结果
本文部分摘自《ASP.NET4权威指南》