コード例 #1
0
        protected override Expression VisitMethodCall(MethodCallExpression m)
        {
            switch (m.Method.Name)
            {
            case "Where":
                this.Visit(m.Arguments[0]);
                sb.Append(" WHERE ");
                LambdaExpression lambda = (LambdaExpression)StripQuotes(m.Arguments[1]);
                this.Visit(lambda.Body);
                return(m);

            case "Associators":
                var arg = (ConstantExpression)m.Arguments[0];
                sb.Append("ASSOCIATORS OF {");
                sb.Append(WmiObject.GetClassName(arg.Value.GetType()));
                sb.Append("=\"");
                sb.Append(WmiObject.GetWmiQueryValue(((WmiObject)arg.Value).ID));
                sb.Append("\"} WHERE ResultClass=");
                sb.Append(WmiObject.GetClassName(m.Method.GetGenericArguments()[0]));
                return(m);

            case "Contains":
                this.Visit(m.Object);
                sb.Append(" LIKE \"%");
                var oldSB = sb;
                sb = new StringBuilder();
                this.Visit(m.Arguments[0]);
                var s = sb.ToString();
                sb = oldSB;
                sb.Append(s.Substring(1, s.Length - 2));
                sb.Append("%\"");
                return(m);
            }
            throw new NotSupportedException(string.Format("The method '{0}' is not supported", m.Method.Name));
        }
コード例 #2
0
        protected override Expression VisitConstant(ConstantExpression c)
        {
            IWmiQueryable q = c.Value as IWmiQueryable;

            if (q != null)
            {
                // assume constant nodes w/ IQueryables are table references
                if (sb.Length == 0)
                {
                    sb.Append("SELECT ");
                    if (m_FetchAllFields)
                    {
                        sb.Append("*");
                    }
                    else
                    {
                        sb.Append(string.Join(",", WmiObject.GetWmiPropertyNames(q.ElementType)));
                    }
                    sb.Append(" FROM ");
                }
                sb.Append(WmiObject.GetClassName(q.ElementType));
            }
            else if (c.Value == null)
            {
                sb.Append("NULL");
            }
            else
            {
                switch (Type.GetTypeCode(c.Value.GetType()))
                {
                case TypeCode.Boolean:
                    sb.Append(((bool)c.Value) ? 1 : 0);
                    break;

                case TypeCode.String:
                    sb.AppendFormat("\"{0}\"", WmiObject.GetWmiQueryValue(c.Value));
                    break;

                case TypeCode.Object:
                    throw new NotSupportedException(string.Format("The constant for '{0}' is not supported", c.Value));

                default:
                    sb.Append(c.Value);
                    break;
                }
            }
            return(c);
        }