繁体   English   中英

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

[英]Converting a string into Linq lambda expression

我们在项目中使用的是RavenDB ,我们有一个搜索面板,允许用户使用不同的条件搜索文档。 以一个建筑时代为例,这些输入数据是从Web客户端以查询字符串的形式从Web客户端发送的,为了将RavenDB的结果RavenDB给我,我必须将其转换为Lucene语法,但我认为对我来说更容易依靠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表达式,我想我的问题就可以解决了:)

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

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

它正在工作:)

更新 :如果我想用Lucene语法编写相同的代码,则应为: Age_Range : [Ix5 TO Ix11] I意思是整数,这意味着我必须知道类型才能生成正确的查询,但是在第一个版本中,我只关心Age是一个数字,我将其RavenDB Linq Provider来为我做魔术: )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM