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); }
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()); }
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(); }
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)))); }