Проблема может быть решена с помощью combined expressions
проекта LINQKit .
Вот как это сделать:
LinqKit
для вашего проекта (например, через диспетчер пакетов NuGet). using LinqKit; // for System.Linq.Expressions.Expression<>.Invoke()
public static System.Linq.Expressions.Expression<
System.Func<%type of ra% ra, %status type%>>
GetStatusExpression = ra != null ? ... : ...;
var lQuery =
from m in %first table%.AsExpandable() ...
join a in ... into ta
from ra in ta.DefaultIfEmpty()
select
new {
...
Status = GetStatusExpression.Invoke(ra),
...
};
Если вы хотите использовать выражение в «нормальном» коде, вам нужно сначала скомпилировать его, как
public static System.Func<%type of ra% ra, %status type%>
GetStatusExpressionCompiled = GetStatusExpression.Compile();
...
if (GetStatusExpressionCompiled(ra) == ...)
{
...
Большая благодарность за то, что он указал мне в правильном направлении с его комментарием.