本文发表在 rolia.net 枫下论坛我的问题是这样,或许你有更好地解决方案?我纯粹是被逼的,否则也不会走到用Expression Tree这一步
据个例子来说明我的需求:
有一个table,4个field,分别是
name, age,address, postcode
我要求在这4个fields中任意3个条件match,那么这个record就match,那么这个组合有多少呢?
有4种可能性,如果用c#来写,我就要写4种if than, 或者写4种 Fun<T, bool> 委托,都是一回事。
现在麻烦来了,我突然增加了一个field,变成了
name, age,address, postcode, sex
同样要求其中任意n种条件满足就返回相应的record,那么我又要修改程序写无数的if than来应付?
显然这是不可能的任务,只能通过Expression Tree来做了
我说的写一个自己的 selet ... where那纯粹是一个简单的text parser的工作,不是重点,重点在于如何把where后面的那些条件动态的变成IL语言,去某个数据storage去查询,比如我可以这么写
select all where name='zhang' and age = '20'
关键是把name='zhang' and age = '20'这个条件变成某种C#可以理解的东西来运行查询,而这个条件的变换是任意的,有无数种可能的组合,比如,下次我又可能把条件变成
select all where name='zhang' and (address = 'toronto' or sex = 'male')
目前,除了Expression Tree,我找不到更好的方法更多精彩文章及讨论,请光临枫下论坛 rolia.net
据个例子来说明我的需求:
有一个table,4个field,分别是
name, age,address, postcode
我要求在这4个fields中任意3个条件match,那么这个record就match,那么这个组合有多少呢?
有4种可能性,如果用c#来写,我就要写4种if than, 或者写4种 Fun<T, bool> 委托,都是一回事。
现在麻烦来了,我突然增加了一个field,变成了
name, age,address, postcode, sex
同样要求其中任意n种条件满足就返回相应的record,那么我又要修改程序写无数的if than来应付?
显然这是不可能的任务,只能通过Expression Tree来做了
我说的写一个自己的 selet ... where那纯粹是一个简单的text parser的工作,不是重点,重点在于如何把where后面的那些条件动态的变成IL语言,去某个数据storage去查询,比如我可以这么写
select all where name='zhang' and age = '20'
关键是把name='zhang' and age = '20'这个条件变成某种C#可以理解的东西来运行查询,而这个条件的变换是任意的,有无数种可能的组合,比如,下次我又可能把条件变成
select all where name='zhang' and (address = 'toronto' or sex = 'male')
目前,除了Expression Tree,我找不到更好的方法更多精彩文章及讨论,请光临枫下论坛 rolia.net