internal static string GetPropertyNameFromExpression(this Expression expression) { var exp = expression.GetMemberExpression(); if (!(exp is MemberExpression)) { return(string.Empty); } var member = ((MemberExpression)exp).Member; var columns = EntityTableCacheHelper.TryGetPropertyList(((MemberExpression)exp).Expression.Type); return(columns[member.Name].ColumnName); }
/// <summary> /// Visits the children of the <see cref="T:System.Linq.Expressions.MemberExpression"/>. /// </summary> /// <returns> /// The modified expression, if it or any subexpression was modified; otherwise, returns the original expression. /// </returns> /// <param name="node">The expression to visit.</param> protected override Expression VisitMember(MemberExpression node) { if (node.IsSpecificMemberExpression(node.Expression.Type, EntityTableCacheHelper.TryGetPropertyList(node.Expression.Type))) { _serverWriter.ColumnName(_serverWriter.GetPropertyNameWithIdentifierFromExpression(node)); return(node); } else if (node.IsVariable()) { _serverWriter.Parameter(node.GetValueFromExpression()); return(node); } else if (node.IsHasValue()) { var me = base.VisitMember(node); _serverWriter.IsNull(); return(me); } return(base.VisitMember(node));; }
private bool IsNullMethod(MethodCallExpression node) { if (!node.Arguments[0].IsSpecificMemberExpression(typeof(TData), EntityTableCacheHelper.TryGetPropertyList <TData>())) { return(false); } _serverWriter.IsNullFunction(); _serverWriter.OpenBrace(); Visit(node.Arguments[0]); _serverWriter.Delimiter(); _serverWriter.WhiteSpace(); _serverWriter.EmptyString(); _serverWriter.CloseBrace(); _serverWriter.WhiteSpace(); _serverWriter.Operator(); _serverWriter.WhiteSpace(); _serverWriter.EmptyString(); return(true); }
private Expression LikeInMethod(MethodCallExpression node) { if (node.Method.DeclaringType == typeof(string)) { // LIKE '..' if (!node.Object.IsSpecificMemberExpression(typeof(TData), EntityTableCacheHelper.TryGetPropertyList <TData>())) { return(node); } Visit(node.Object); _serverWriter.Like(); if (node.Method.Name == MethodCall.EndsWith || node.Method.Name == MethodCall.Contains) { _serverWriter.LikePrefix(); } Visit(node.Arguments[0]); if (node.Method.Name == MethodCall.StartsWith || node.Method.Name == MethodCall.Contains) { _serverWriter.LikeSuffix(); } return(node); } // IN (...) object ev; if (node.Method.DeclaringType == typeof(List <string>)) { if ( !node.Arguments[0].IsSpecificMemberExpression(typeof(TData), EntityTableCacheHelper.TryGetPropertyList <TData>())) { return(node); } Visit(node.Arguments[0]); ev = node.Object.GetValueFromExpression(); } else if (node.Method.DeclaringType == typeof(Enumerable)) { if ( !node.Arguments[1].IsSpecificMemberExpression(typeof(TData), EntityTableCacheHelper.TryGetPropertyList <TData>())) { return(node); } Visit(node.Arguments[1]); ev = node.Arguments[0].GetValueFromExpression(); } else { return(node); } _serverWriter.In(); // Add each string in the collection to the list of locations to obtain data about. var queryStrings = (IList <object>)ev; var count = queryStrings.Count(); _serverWriter.OpenBrace(); for (var i = 0; i < count; i++) { _serverWriter.Parameter(queryStrings.ElementAt(i)); if (i + 1 < count) { _serverWriter.Delimiter(); } } _serverWriter.CloseBrace(); return(node); }