2012-02-29 37 views
2

我正在使用Dynamic Linq来查询我们的数据库,该字符串是基于用户输入的过滤器创建的。在一种情况下,我们需要在两个字段上执行合并,以便将过滤器应用于结果。在Dynamic Linq中合并

产生的语法将是这个样子:

(nullableField ?? requiredField) == "foo" 

或者,如果使用扩展方法:

(nullableField ?? requiredField).Contains("foo") 

动态LINQ的,或者至少是版本目前,我们在我们的项目,不支持coalesce,有没有可用的实现或关于如何实现我自己的建议?我对表情很少有经验,我正在努力创造自己的表情。到目前为止,下面的代码适用于我的有限测试,但我不确定我是否已经正确地完成了它。

// ?? operator 
    Expression ParseCoalesce() 
    { 
     Expression left = ParseLogicalOr(); 
     if (token.id == TokenId.DoubleQuestion) 
     { 
      NextToken(); 
      Expression expr1 = ParseExpression(); 
      left = Expression.Coalesce(left, expr1); 
     } 
     return left; 
    } 

这个代码的思考:

这是由ParseExpression()叫什么名字?有没有更好的方法来做到这一点?

+0

是微不足道的转换为'ConditionalExpression'实现它。你的系统是否支持? – Gabe 2012-02-29 15:36:37

+0

@加贝我想它可以。提供类似'(nullableField!= null?nullableField ==“foo”:requiredField ==“foo”)'? – Priz23 2012-02-29 15:43:39

回答

1

如果您的系统支持ConditionalExpression,你可以像

(nullableField != null ? nullableField == "foo" : requiredField == "foo") 

(nullableField != null ? nullableField : requiredField) == "foo" 
+0

尽管生成的字符串(当包含表名等时)比简单的??有点混乱,我将事实上已经将ConditionExpression构建到Dynamic Linq中,并且需要定制实现。感谢您的帮助Gabe! – Priz23 2012-02-29 16:32:24