【问题标题】:Converting a string into Linq lambda expression将字符串转换为 Linq lambda 表达式
【发布时间】:2014-09-14 11:50:44
【问题描述】:

我们在项目中使用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=&gt;b.Age&gt;=5 转换为 lambda 表达式的方法,我想我的问题会解决 :)

【问题讨论】:

    标签: c# linq lambda lucene ravendb


    【解决方案1】:

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

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

    它正在工作:)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多