【发布时间】:2015-03-30 14:25:52
【问题描述】:
我想通过使用表达式树使部分 LINQ 查询可重用(我认为这就是它的调用方式)。
这是我的查询的简化版本:
var lQuery =
from m in ...
join a in ... into ta
from ra in ta.DefaultIfEmpty()
select
new {
...
Status = ra != null ? ... : ..., /* <- i want this to be reusable */
...
};
如您所见,Status 的值是通过? : 语法确定的,该语法由 LINQ 自动翻译(我想是一个表达式树,SQL 日志最后显示了一个 CASE WHEN 查询)。
如何将该代码移动到单独的函数中,以使我的应用程序在运行时不会引发not supported 异常?
我尝试添加一个函数
public static System.Linq.Expressions.Expression<System.Func<%type of ra%, %status type%>>
QueryStatusExpression()
{
return ra => ra != null ? ... : ...;
}
然后像使用它一样使用它
Status = QueryStatusExpression().Invoke(ra)
但它会抛出 not supported 异常。
我现在没有想法。任何帮助表示赞赏。
【问题讨论】:
标签: c# linq expression-trees