public void TestBuilder1()
        {
            var query = new ODataQueryBuilder()
                        .Select <Color>()
                        .Filter("name eq blue")
                        .OrderBy("name desc")
                        .Top(1)
                        .Skip(2)
                        .Query;

            _output.WriteLine(query);
        }
Ejemplo n.º 2
0
        public void ODataQueryBuilderList_concat_is_null_or_empty_value_agr2_success(string value)
        {
            var odataQueryBuilderOptions = new ODataQueryBuilderOptions {
                SuppressExceptionOfNullOrEmptyFunctionArgs = true
            };
            var odataQueryBuilder = new ODataQueryBuilder <ODataInfoContainer>(
                _commonFixture.BaseUri, odataQueryBuilderOptions);

            var uri = odataQueryBuilder
                      .For <ODataTypeEntity>(s => s.ODataType)
                      .ByList()
                      .Filter((s, f) => f.Concat(s.TypeCode, value) == "typeCodeTest;")
                      .ToUri();

            uri.OriginalString.Should().Be("http://mock/odata/ODataType?$filter='typeCodeTest;'");
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Function to request Metrics from either Azure Monitor or CosmosDB Resource Provider.
        /// The result is returned as JSON.
        /// </summary>
        /// <param name="resourceUri">Resource of which metric should be consumed</param>
        /// <param name="oDataQueryBuilderDelegate">Delegate to an inline lambda function to build a simple oDataQuery with a Builder class.</param>
        /// <param name="insightsQueryBuilderDelegate">Delegate to an inline lambda function to create the query parameters for an Azure Monitor Query with a Builder class</param>
        /// <param name="apiVersion">Alternative API-Version, if default is not sufficient</param>
        /// <returns>Metrics in JSON-Format</returns>
        public async Task <string> GetMetricAsJSONAsync(
            string resourceUri,
            Action <ODataQueryBuilder> oDataQueryBuilderDelegate,
            Action <InsightsQueryBuilder> insightsQueryBuilderDelegate = null,
            string apiVersion = null)
        {
            StringBuilder        requestUri           = CreateBaseRequestUri(resourceUri, "metrics", apiVersion);
            InsightsQueryBuilder insightsQueryBuilder = new InsightsQueryBuilder();
            ODataQueryBuilder    oDataQueryBuilder    = null;

            if (oDataQueryBuilderDelegate != null)
            {
                oDataQueryBuilder = new ODataQueryBuilder();
                oDataQueryBuilderDelegate(oDataQueryBuilder);
            }
            if (insightsQueryBuilderDelegate != null)
            {
                insightsQueryBuilderDelegate(insightsQueryBuilder);
                insightsQueryBuilder.AddODataQuery(oDataQueryBuilder);
                requestUri.Append("&");
                requestUri.Append(insightsQueryBuilder.ToString());
            }
            else
            {
                if (oDataQueryBuilderDelegate != null)
                {
                    string oDataQuery = oDataQueryBuilder.ToString();
                    if (!string.IsNullOrEmpty(oDataQuery))
                    {
                        requestUri.Append("&$filter=");
                        requestUri.Append(oDataQuery);
                    }
                }
            }
            HttpResponseMessage response = await this.HttpClient.GetAsync(requestUri.ToString());

            if (response.IsSuccessStatusCode)
            {
                return(await response.Content.ReadAsStringAsync());
            }
            else
            {
                throw new Exception(response.ReasonPhrase);
            }
        }
Ejemplo n.º 4
0
        public void ODataQueryBuilderList_Operator_In_is_empty_1()
        {
            var constEmptyIntIds = new int[0];

            var odataQueryBuilderOptions = new ODataQueryBuilderOptions {
                SuppressExceptionOfNullOrEmptyOperatorArgs = false
            };
            var odataQueryBuilder = new ODataQueryBuilder <ODataInfoContainer>(
                _commonFixture.BaseUri, odataQueryBuilderOptions);

            odataQueryBuilder.Invoking(
                (r) => r
                .For <ODataTypeEntity>(s => s.ODataType)
                .ByList()
                .Filter((s, f, o) => o.In(s.IdType, constEmptyIntIds))
                .ToUri())
            .Should().Throw <ArgumentException>().WithMessage("Enumeration is empty or null");
        }
Ejemplo n.º 5
0
        public void ODataQueryBuilderList_Operator_In_Empty_Success()
        {
            var odataQueryBuilderOptions = new ODataQueryBuilderOptions {
                SuppressExceptionOfNullOrEmptyOperatorArgs = true
            };
            var odataQueryBuilder = new ODataQueryBuilder <ODataInfoContainer>(
                _commonFixture.BaseUri, odataQueryBuilderOptions);

            var constStrIds = default(IEnumerable <string>);
            var constEmprtyStrListIds = new string[] { }.ToList();
            var constIntIds = default(int[]);
            var constEmptyIntIds = new int[0];
            var constIntListIds = new[] { 123, 512 }.ToList();
            var newObject = new ODataTypeEntity {
                ODataKind = new ODataKindEntity {
                    Sequence = constIntListIds
                }
            };
            var newObjectSequenceArray = new ODataTypeEntity {
                ODataKind = new ODataKindEntity {
                    SequenceArray = constIntIds
                }
            };

            var uri = odataQueryBuilder
                      .For <ODataTypeEntity>(s => s.ODataType)
                      .ByList()
                      .Filter((s, f, o) => o.In(s.ODataKind.ODataCode.Code, constStrIds) &&
                              o.In(s.ODataKind.ODataCode.Code, constEmprtyStrListIds) &&
                              o.In(s.IdType, constIntIds) &&
                              o.In(s.IdType, constEmptyIntIds) &&
                              o.In(s.IdType, constIntListIds) &&
                              o.In((int)s.IdRule, constIntIds) &&
                              o.In((int)s.IdRule, constIntListIds) &&
                              o.In(s.ODataKind.IdKind, newObject.ODataKind.Sequence) &&
                              o.In(s.ODataKind.ODataCode.IdCode, newObjectSequenceArray.ODataKind.SequenceArray))
                      .ToUri();

            uri.OriginalString.Should().Be("http://mock/odata/ODataType?$filter=IdType in (123,512) and IdRule in (123,512) and ODataKind/IdKind in (123,512)");
        }
Ejemplo n.º 6
0
        public void ODataQueryBuilderList_Operator_In_is_null_4()
        {
            var constIntIds            = default(int[]);
            var newObjectSequenceArray = new ODataTypeEntity {
                ODataKind = new ODataKindEntity {
                    SequenceArray = constIntIds
                }
            };

            var odataQueryBuilderOptions = new ODataQueryBuilderOptions {
                SuppressExceptionOfNullOrEmptyOperatorArgs = false
            };
            var odataQueryBuilder = new ODataQueryBuilder <ODataInfoContainer>(
                _commonFixture.BaseUri, odataQueryBuilderOptions);

            odataQueryBuilder.Invoking(
                (r) => r
                .For <ODataTypeEntity>(s => s.ODataType)
                .ByList()
                .Filter((s, f, o) => o.In(s.ODataKind.ODataCode.IdCode, newObjectSequenceArray.ODataKind.SequenceArray))
                .ToUri())
            .Should().Throw <ArgumentException>().WithMessage("Enumeration is empty or null");
        }
Ejemplo n.º 7
0
        public void ODataQueryBuilderList_Test_Contains_is_null_or_empty_value_Success()
        {
            var odataQueryBuilderOptions = new ODataQueryBuilderOptions {
                SuppressExceptionOfNullOrEmptyFunctionArgs = true
            };
            var odataQueryBuilder = new ODataQueryBuilder <ODataInfoContainer>(
                _commonFixture.BaseUri, odataQueryBuilderOptions);

            var constValue = "P";
            var newObject  = new ODataTypeEntity {
                TypeCode = string.Empty
            };
            var uri = odataQueryBuilder
                      .For <ODataTypeEntity>(s => s.ODataType)
                      .ByList()
                      .Filter((s, f) =>
                              f.Contains(f.ToLower(s.ODataKind.ODataCode.Code), null) ||
                              f.Contains(s.ODataKind.ODataCode.Code, constValue) ||
                              f.Contains(s.ODataKindNew.ODataCode.Code, newObject.TypeCode) ||
                              f.Contains(s.ODataKindNew.ODataCode.Code, string.Empty))
                      .ToUri();

            uri.OriginalString.Should().Be("http://mock/odata/ODataType?$filter=contains(ODataKind/ODataCode/Code,'P')");
        }
        public IActionResult ApplyQueryFilter([FromBody] JsonDict jsonDict)
        {
            var queryDict   = jsonDict["query"] as JsonDict;
            var optionsDict = jsonDict["options"] as JsonDict;
            var query       = _eqService.GetQueryByJsonDict(queryDict);

            var lvo = optionsDict.ToListViewOptions();

            //We can use OData query to get filtered information from Azure Storage
            var    odataBuilder = new ODataQueryBuilder(query);
            string filterString = odataBuilder.Build();

            var list = _context.Customers.Filter(filterString);

            // Here is another option of solving the same task
            // In this case we don't build OData query, so we can use all operators in our model.
            // However, it will work well only if Customers implements IQueryable interface
            // Otherwise it will load the whole table content from the storage before applying the query.
            //
            // list = _context.Customers.GetAll().DynamicQuery<Customer>(query).OrderBy(d => d.Id);
            //

            return(View("_CustomerListPartial", list));
        }
Ejemplo n.º 9
0
 public ODataQueryOptionListTest(CommonFixture commonFixture)
 {
     _commonFixture            = commonFixture;
     _odataQueryBuilderDefault = new ODataQueryBuilder <ODataInfoContainer>(
         commonFixture.BaseUri, new ODataQueryBuilderOptions());
 }