Beispiel #1
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);
        }
Beispiel #2
0
        public string Translate(IWmiQueryable query, bool fetchAllFields = false)
        {
            m_FetchAllFields = fetchAllFields;
            var a = query.ElementType.GetCustomAttribute <WmiClassAttribute>(false);

            if (a == null)
            {
                throw new InvalidOperationException();
            }

            sb = new StringBuilder();
            var e = Evaluator.PartialEval(query.Expression);

            Visit(e);
            return(sb.ToString());
        }
Beispiel #3
0
        public IEnumerator <TResult> Execute <TResult>(IWmiQueryable query)
            where TResult : WmiObject <TResult>, new()
        {
            if (m_QueryBuilder == null)
            {
                m_QueryBuilder = new WmiQueryBuilder(this);
            }

            var querystring = m_QueryBuilder.Translate(query, m_FetchAllFields);
            var objQuery    = new ObjectQuery(querystring);
            var wmiSearcher = new ManagementObjectSearcher(m_Scope, objQuery);

            Debug.WriteLine(querystring);

            foreach (ManagementObject o in wmiSearcher.Get().Cast <ManagementObject>())
            {
                yield return(WmiObject.CreateObject <TResult>(this, o));
            }
            wmiSearcher.Dispose();
        }
Beispiel #4
0
 public static IEnumerable <T> Where <T>(this IWmiQueryable <T> source, Expression <Func <T, bool> > predicate)
     where T : WmiObject <T>, new()
 {
     return(new WmiQuery <T>(source.Context, Expression.Call(((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(T)),
                                                             source.Expression, Expression.Quote(predicate))));
 }