Example #1
0
        public void GetFilter()
        {
            var textSerializer       = new Serialize.Linq.Serializers.JsonSerializer();
            var expressionSerializer = new Serialize.Linq.Serializers.ExpressionSerializer(textSerializer);
            Expression <Func <object, bool> > exp = i => ((IWB)i).StatusCode == "IWB_COMPLETED";
            var strExpr = expressionSerializer.SerializeText(exp);

            var desExpr        = (Expression <Func <object, bool> >)expressionSerializer.DeserializeText(strExpr);
            var compileDesExpr = desExpr.Compile();

            BLHelper.InitBL(dalType: DALType.Oracle);
            var mgr   = IoC.Instance.Resolve <IBaseManager <IWB> >();
            var items = mgr.GetFiltered("STATUSCODE_R = 'IWB_COMPLETED' and ROWNUM < 2");

            items.Should().NotBeEmpty("Ничего не получили, нет смысла проверять дальше");
            var res = items.Where(compileDesExpr);

            res.Should().HaveCount(items.Count());
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            object result = null;

            if (objectType.IsGenericType)
            {
                var genericType          = objectType.GetGenericTypeDefinition();
                var expressionSerializer = new Serialize.Linq.Serializers.JsonSerializer();

                if (genericType == typeof(FilterHandle <>))
                {
                    JObject jObject        = JObject.Load(reader);
                    var     expressionJson = jObject.First.First.ToString();
                    var     expressionNode = expressionSerializer.Deserialize <ExpressionNode>(expressionJson);
                    var     expression     = expressionNode.ToBooleanExpression <T>();
                    result = new FilterHandle <T>(expression);
                }
                else if (genericType == typeof(NavigationPropertiesHandle <>))
                {
                    JObject jObject           = JObject.Load(reader);
                    var     expressionObjects = jObject.First.First;
                    Expression <Func <T, object> >[] expressionArray = new Expression <Func <T, object> > [expressionObjects.Count()];
                    int index = 0;

                    foreach (var expressionToken in expressionObjects)
                    {
                        var expressionJson = expressionToken.First.First.ToString();
                        var expressionNode = expressionSerializer.Deserialize <ExpressionNode>(expressionJson);
                        var expression     = expressionNode.ToExpression <Func <T, object> >();
                        expressionArray[index] = expression;
                        index++;
                    }

                    result = new NavigationPropertiesHandle <T>(expressionArray);
                }
            }

            return(result);
        }