internal SqlMember Member(SqlExpression expr, MemberInfo member) { Type clrType = TypeSystem.GetMemberType(member); MetaType metaType = this.model.GetMetaType(member.DeclaringType); MetaDataMember metaDataMember = metaType.GetDataMember(member); if (metaType != null && metaDataMember != null) { return(new SqlMember(clrType, this.Default(metaDataMember), expr, member)); } return(new SqlMember(clrType, this.Default(clrType), expr, member)); }
private static bool GetKeyFromPredicate(MetaType type, Dictionary <MetaDataMember, object> keys, Expression mex, Expression vex) { MemberExpression memex = mex as MemberExpression; if (memex == null || memex.Expression == null || memex.Expression.NodeType != ExpressionType.Parameter || memex.Expression.Type != type.Type) { return(false); } if (!type.Type.IsAssignableFrom(memex.Member.ReflectedType) && !memex.Member.ReflectedType.IsAssignableFrom(type.Type)) { return(false); } MetaDataMember mm = type.GetDataMember(memex.Member); if (!mm.IsPrimaryKey) { return(false); } if (keys.ContainsKey(mm)) { return(false); } ConstantExpression cex = vex as ConstantExpression; if (cex != null) { keys.Add(mm, cex.Value); return(true); } InvocationExpression ie = vex as InvocationExpression; if (ie != null && ie.Arguments != null && ie.Arguments.Count == 0) { ConstantExpression ce = ie.Expression as ConstantExpression; if (ce != null) { keys.Add(mm, ((Delegate)ce.Value).DynamicInvoke(new object[] {})); return(true); } } return(false); }
private static bool GetKeyFromPredicate(MetaType type, Dictionary <MetaDataMember, object> keys, Expression mex, Expression vex) { var memberExpression = mex as MemberExpression; if (memberExpression == null || memberExpression.Expression == null || memberExpression.Expression.NodeType != ExpressionType.Parameter || memberExpression.Expression.Type != type.Type) { return(false); } if (!type.Type.IsAssignableFrom(memberExpression.Member.ReflectedType) && !memberExpression.Member.ReflectedType.IsAssignableFrom(type.Type)) { return(false); } var dataMember = type.GetDataMember(memberExpression.Member); if (!dataMember.IsPrimaryKey) { return(false); } if (keys.ContainsKey(dataMember)) { return(false); } var constantExpression = vex as ConstantExpression; if (constantExpression != null) { keys.Add(dataMember, constantExpression.Value); return(true); } var invocationExpression = vex as InvocationExpression; if (invocationExpression != null && invocationExpression.Arguments != null && invocationExpression.Arguments.Count == 0) { var constantExpression2 = invocationExpression.Expression as ConstantExpression; if (constantExpression2 != null) { keys.Add(dataMember, ((Delegate)constantExpression2.Value).DynamicInvoke()); return(true); } } return(false); }
private static MetaDataMember GetDataMember(MetaType dataType, MemberInfo member) { MetaDataMember dataMember; try { dataMember = dataType.GetDataMember(member); } catch (InvalidOperationException) { throw new UnmappedItemException("Cannot resolve member: " + member.DeclaringType.FullName + "." + member.Name + " is not a mapped member"); } if (dataMember == null) { throw new UnmappedItemException("Cannot resolve member: " + member.DeclaringType.FullName + "." + member.Name + " is not a mapped member"); } return(dataMember); }
private static bool GetKeyFromPredicate(MetaType type, IDictionary <MetaDataMember, object> keys, Expression mex, Expression vex) { var expression = mex as MemberExpression; if ((((expression != null) && (expression.Expression != null)) && ((expression.Expression.NodeType == ExpressionType.Parameter) && (expression.Expression.Type == type.Type))) && (type.Type.IsAssignableFrom(expression.Member.ReflectedType) || expression.Member.ReflectedType.IsAssignableFrom(type.Type))) { MetaDataMember dataMember = type.GetDataMember(expression.Member); if (!dataMember.IsPrimaryKey) { return(false); } if (keys.ContainsKey(dataMember)) { return(false); } var expression2 = vex as ConstantExpression; if (expression2 != null) { keys.Add(dataMember, expression2.Value); return(true); } } return(false); }
public override MetaDataMember GetDataMember(System.Reflection.MemberInfo member) { return(_orgtype.GetDataMember(member)); }