(string.Format({0}.{1}, _collectionName, memberName), value); } } public class QueryMember
{ private readonly QueryExpressionHelper _queryExpression; private string _collectionName; public string Context { get { return _collectionName; } } public QueryMember(Expression
> exp) { _queryExpression = new QueryExpressionHelper(); _collectionName = _queryExpression.MemberExpression(exp); } public QueryMember(string context) { _collectionName = context; } } public class QueryExpressionHelper { public string Context; public string MemberExpression
(Expression
expression) { MemberExpression me; switch (expression.Body.NodeType) { case ExpressionType.MemberAccess: me = expression.Body as MemberExpression; break; case ExpressionType.Convert: dynamic convertedBody = expression.Body; me = convertedBody.Operand as MemberExpression; break; default: throw new NotSupportedException(string.Format(Member with node type {0} is not supported. expression {1}, expression.Body.NodeType, expression)); } var stack = new Stack
(); while (me != null) { stack.Push(me.Member.Name); me = me.Expression as MemberExpression; } var expStr = string.Join(., stack.ToArray()); return expStr; } } public static class QueryMoney { public static IMongoQuery Value(string name, double val) { var accuracy = 0.005; return Query.And( Query.LT(name, new BsonDouble(val + accuracy)), Query.GT(name, new BsonDouble(val - accuracy))); } }
?
|