[Conditional("TRACE_PARSING")] public static void WriteLine(LambdaInfo lambda) { WriteLineInternal("lambda", lambda); }
[Conditional("TRACE_PARSING")] public static void WriteLine(string prefix, LambdaInfo lambda) { WriteLineInternal(prefix, lambda); }
[Conditional("TRACE_PARSING")] public static void WriteLine( LambdaInfo lambda) { WriteLineInternal("lambda", lambda); }
static void WriteLineInternal(string prefix, LambdaInfo lambda) { if (lambda != null) Debug.WriteLine(prefix + " - " + lambda.Body + " : Expression." + lambda.Body.GetType().Name, GetMethodName()); }
public override QueryField GetBaseField(LambdaInfo lambda, Expression expr) { return(BaseQuery.GetBaseField(lambda, expr)); }
public override QueryField GetField(LambdaInfo lambda, Expression expr, int currentMember) { switch (expr.NodeType) { case ExpressionType.Parameter: for (var i = 0; i < Lambda.Parameters.Length; i++) { if (Lambda.Parameters[i] == expr) { return(Sources[i]); } } return(null); //throw new InvalidOperationException(); case ExpressionType.MemberAccess: { var ma = (MemberExpression)expr; if (ma.Expression != null) { if (ma.Expression.NodeType == ExpressionType.Parameter) { return(GetField(ma.Member)); } if (ma.Expression.NodeType == ExpressionType.Constant) { break; } } var list = GetMemberList(lambda, expr); if (list == null || list.Count == 0) { return(null); } var field = GetField(list, currentMember); if (field != null) { return(field); } break; } } foreach (var field in Fields) { if (field is ExprColumn && ((ExprColumn)field).Expr == expr) { return(field); } } return(null); }
public override QueryField GetField(LambdaInfo lambda, Expression expr, int currentMember) { if (expr.NodeType == ExpressionType.MemberAccess) { var ma = (MemberExpression)expr; if (ma.Expression != null) { if (ma.Expression.Type == ObjectType || currentMember > 0) { var list = GetMemberList(lambda, expr); if (list == null) { return(null); } if (list.Count > 1) { var field = GetField(list, currentMember); if (field != null) { return(field); } } return(GetField(ma.Member)); } // Check for associations and 'InnerObject.Field' case. // var name = ma.Member.Name; var e = ma.Expression; while (e != null) { if (e.NodeType == ExpressionType.MemberAccess) { ma = (MemberExpression)e; if (ma.Expression == null) { break; } name = ma.Member.Name + '.' + name; if (ma.Expression.Type == ObjectType) { Column col; if (_columns.TryGetValue(name, out col)) { return(col); } var tbl = GetAssociation(ma.Member); if (tbl != null) { return(tbl.GetField(lambda, expr, currentMember + 1)); } } e = ma.Expression; } else { break; } } } } return(null); }
public abstract QueryField GetField(LambdaInfo lambda, Expression expr, int currentMember);