我正在使用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()叫什么名字?有没有更好的方法来做到这一点?
是微不足道的转换为'ConditionalExpression'实现它。你的系统是否支持? – Gabe 2012-02-29 15:36:37
@加贝我想它可以。提供类似'(nullableField!= null?nullableField ==“foo”:requiredField ==“foo”)'? – Priz23 2012-02-29 15:43:39