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

本文关键字:lambda 表达式 Linq 字符串 转换 | 更新日期: 2023-09-27 18:21:52

我们在项目中使用RavenDB,我们有一个搜索面板,用户可以使用不同的条件搜索文档。以建筑年代为例。这些输入数据是以查询字符串的形式从web客户端发送的,我必须将它们翻译成Lucene语法才能从RavenDB中获得结果,但我认为,我可以更容易地依靠Raven Linq Provider为我完成这项工作,而不是使用:

Age_Range : [Ix5 TO NULL]

我可以有:

b=>b.Age>=5

然后我所要做的就是将这个字符串转换成lambda表达式。

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

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

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

如果我能找到一种方法将这个字符串b=>b.Age>=5转换为lambda表达式,我想我的问题就会得到解决:)

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

我发现Dynamic Linq Library以某种方式做了我想做的事情,但它有自己的语法(与Linq不同)。这里有一个例子:

var query = session.Query<Person>().Where("Age <= 11 And Age >= 5"); 

它正在工作:)

UPDATE:如果我想用Lucene语法写同样的东西,它应该是:Age_Range : [Ix5 TO Ix11]I在这里的意思是整数,这意味着我必须知道类型才能生成正确的查询,但在第一个版本中,我只关心Age是一个数字,我把它留给RavenDB Linq Provider来为我做魔术:)