http://blogs.msdn.com/vbteam/archive/2007/08/29/implementing-dynamic-searching-using-linq.aspx

                作者: Jonathan

 

  

 

在数据窗体应用程序中一个常见的需求是使用户能够按照由任意字段组合的动态查询搜索。例如,程序中的搜索功能允许用户查找所有满足在多个列上定义了不同规则的记录。

 

 

 

 

db.Orders _

try.Text _

_

dtpEndDate.Value

 

)来建立动态查询。

 

语句第一个部分看起来像这个样子:

 

 

 
)

)

))

New ParameterExpression() {p})

 

Yikes,这只是一小部分,我们目前只完成了1/3的Where语句!我可不想在写12行代码去来在运行时建立Where语句。我想做的是写一个CreateCondition 扩展方法,允许我用一行简单的代码建立表达式树(Expression Tree),像是这个样:

 

 

)

 

个条件:

 

startDate? = #1/1/1997#

endDate? = #1/31/1997#

 

, Compare.GreaterThanOrEqual, startDate)

, Compare.LessThanOrEqual, endDate)

 

 

方法是泛型的并可以根据传入的参数推断类型。我们现在仅需要组合条件到一个条件中:

 

 

c = Condition.Combine(condition1, Compare.And, condition2, condition3)

 

)来完成这个(等价于上面的代码):

 

condition3

 

 

对象来过滤数据:

 

 

 

 

Dim filteredQuery = db.Orders.Where(c)

 

filteredQuery 

 

In filteredQuery _

By row.OrderDate, row.OrderID _

Select row

 

DataGridView1

 

DataGridView1.DataSource = query 

 

 
 
 
 
 
它允许用户在运行时动态指定条件
 
 
 
 
    
 
?文档中以的代码在下面,我不打算在全部解释,但这里只解释一下基础部分:
 
    
Condition, Condition(Of T), and Condition(Of T, S)
 
         
  1. )通过构造这个,可以为一般版本参数推断带来好处,即我们不用担心传入的一般版本参数到方法,工厂方法将帮助我们解决。
 
 
)。用户可以调用这个代理通过调用匹配方法。
 
 
 
            '编译lambda 表达式成委托
 
  
 
对于本地执行
 

相关文章: