将字符串转换为Linq lambda表达式

Bea*_*692 1 c# linq lucene lambda ravendb

我们正在RavenDB项目中使用,我们有一个搜索面板,允许用户使用不同的标准搜索文档.以建筑时代为例.这些输入数据是从查询字符串中的Web客户端发送的,我必须将它们翻译成Lucene语法才能得到结果,RavenDB但我认为依赖Raven会更容易Linq提供商为我做这项工作,而不是:

Age_Range : [Ix5 TO NULL]
Run Code Online (Sandbox Code Playgroud)

我可以有 :

b=>b.Age>=5
Run Code Online (Sandbox Code Playgroud)

然后,我所要做的就是将此字符串转换为lambda表达式.

我现在正在做的是编译这样的代码:

public class BuildingQueryBuilderXYZ:IQueryBuilder<Building>
{
     public IRavenQueryable<Building> BuildQuery(IDocumentSession session)
     {
           return session.Query<Building>().Where(b=>b.Age>=5);  
     }
}
Run Code Online (Sandbox Code Playgroud)

它正在工作,但我必须为每个请求编译一个程序集,这不是搜索数据库的有效方法.

如果我能找到将此字符串b=>b.Age>=5转换为lambda表达式的方法,我认为我的问题将得到解决:)

Bea*_*692 5

好吧,我发现动态Linq库以某种方式做我想做的事情,但它有自己的语法(与linq不同).这是一个例子:

var query = session.Query<Person>().Where("Age <= 11 And Age >= 5"); 
Run Code Online (Sandbox Code Playgroud)

它正在工作:)

更新:如果我想用Lucene语法编写相同的内容,那就是:Age_Range : [Ix5 TO Ix11].并且这I意味着整数,这意味着我必须知道类型才能生成正确的查询,但在第一个版本中我所关心的Age只是一个数字而且我留给它RavenDB Linq Provider为我做魔术:)