コード例 #1
0
ファイル: TimelineQuery.cs プロジェクト: ArildF/linqtwit
        private static void BuildArgs(BinaryExpression expression, TimeLineArgs args)
        {
            if (expression.Left.NodeType != ExpressionType.MemberAccess)
            {
                throw new NotSupportedException(string.Format("Expression {0} not supported", expression.Left));
            }

            MemberExpression me = (MemberExpression) expression.Left;
            if (!me.Member.IsProperty<Status, long>(t => t.Id))
            {
                throw new NotSupportedException(String.Format("Expression {0} not supported", me));
            }

            long id = ((IConvertible)((ConstantExpression)expression.Right).Value).ToInt64(CultureInfo.InvariantCulture);

            switch (expression.NodeType)
            {
                case ExpressionType.GreaterThanOrEqual:
                    args.SinceId = id;
                    break;
                case ExpressionType.LessThanOrEqual:
                    args.MaxId = id;
                    break;
                default:
                    throw new NotSupportedException(
                        String.Format("Expression of type {0} not supported", expression.NodeType));
            }
        }
コード例 #2
0
ファイル: TimelineQuery.cs プロジェクト: ArildF/linqtwit
        private static void HandleTakeArgs(Expression expression, TimeLineArgs args)
        {
            MethodInfo info = MethodInfoForTake();
            MethodCallFinderVisitor visitor = new MethodCallFinderVisitor(info);

            if (visitor.FindMethod(expression))
            {
                args.Count = Convert.ToInt32(visitor.Args.First());
            }
        }
コード例 #3
0
ファイル: TimelineQuery.cs プロジェクト: ArildF/linqtwit
        public object Execute(Expression expression, bool isEnumerable)
        {
            TimeLineArgs args = new TimeLineArgs();
            HandleWhereArgs(expression, args);

            HandleTakeArgs(expression, args);

            HandlePageArgs(expression, args);

            return _statusFunc(args);
        }
コード例 #4
0
ファイル: TimelineQuery.cs プロジェクト: ArildF/linqtwit
        private void HandlePageArgs(Expression expression, TimeLineArgs args)
        {
            MethodInfo info = MethodInfoForPage();
            MethodCallFinderVisitor visitor = new MethodCallFinderVisitor(info);

            if (visitor.FindMethod(expression))
            {
                args.Page = Convert.ToInt32(visitor.Args.First());
            }
        }
コード例 #5
0
ファイル: TimelineQuery.cs プロジェクト: ArildF/linqtwit
        private void HandleWhereArgs(Expression expression, TimeLineArgs args)
        {
            var whereVisitor = new WhereVisitor();

            MethodCallExpression whereExpression = whereVisitor.FindWhere(expression);
            if (whereExpression == null)
            {
                return;
            }

            LambdaExpression lambdaExpression =
                (LambdaExpression)
                ((UnaryExpression)whereExpression.Arguments[1]).Operand;

            var idVisitor = new IdExpressionVisitor();
            if (!idVisitor.FindIdExpression(lambdaExpression))
            {
                return;
            }

            foreach (BinaryExpression binaryExpression in idVisitor.Expressions)
            {
                BuildArgs(binaryExpression, args);
            }
        }
コード例 #6
0
ファイル: TimelineQueryTest.cs プロジェクト: ArildF/linqtwit
 private Status[] RetrieveStatuses(TimeLineArgs args)
 {
     _args = args;
     return _statusesToReturn;
 }