public bool CanBuild(ExpressionBuilder builder, BuildInfo buildInfo) { var expr = buildInfo.Expression; if (expr.NodeType == ExpressionType.NewArrayInit) { return(true); } if (expr.NodeType == ExpressionType.Call) { var mc = (MethodCallExpression)expr; if (mc.IsSameGenericMethod(_containsMethodInfos)) { return(false); } } if (!typeof(IEnumerable <>).IsSameOrParentOf(expr.Type)) { return(false); } var collectionType = typeof(IEnumerable <>).GetGenericType(expr.Type); if (collectionType == null) { return(false); } if (!builder.CanBeCompiled(expr)) { return(false); } switch (expr.NodeType) { case ExpressionType.MemberAccess: { var ma = (MemberExpression)expr; if (ma.Expression == null) { break; } if (ma.Expression.NodeType != ExpressionType.Constant) { return(false); } break; } case ExpressionType.Constant: if (((ConstantExpression)expr).Value is not IEnumerable) { return(false); } break; default: return(false); } return(true); }