OData.Fluent.QueryBuilder 1.0.3

dotnet add package OData.Fluent.QueryBuilder --version 1.0.3
                    
NuGet\Install-Package OData.Fluent.QueryBuilder -Version 1.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OData.Fluent.QueryBuilder" Version="1.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OData.Fluent.QueryBuilder" Version="1.0.3" />
                    
Directory.Packages.props
<PackageReference Include="OData.Fluent.QueryBuilder" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OData.Fluent.QueryBuilder --version 1.0.3
                    
#r "nuget: OData.Fluent.QueryBuilder, 1.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OData.Fluent.QueryBuilder@1.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OData.Fluent.QueryBuilder&version=1.0.3
                    
Install as a Cake Addin
#tool nuget:?package=OData.Fluent.QueryBuilder&version=1.0.3
                    
Install as a Cake Tool

odata-query-builder

Simple fluent dotnet OData query builder.

The goal of this project is to provide an easy way of building OData query parameters, without the need to manually concatenate strings.

It is allows building queries for systems that don't necessarily conform to the OData standard. For example, Dynamics 365 OData endpoints.

Installation

To install OData.Fluent.QueryBuilder from Visual Studio, find OData.Fluent.QueryBuilder in the NuGet package manager user interface or enter the following command in the package manager console:

Install-Package OData.Fluent.QueryBuilder

To add a link to the main dotnet project, run the following command line:

dotnet add package OData.Fluent.QueryBuilder

OData Filter Builder

Simple filters
var filter = new ODataFilterBuilder()
    .Where("Property1 eq 'Test'")
    .Build();

Output: Property1 eq 'Test'

Multiple filters
var filter = new ODataFilterBuilder()
    .Where(filter => filter
        .Where("Property2 eq 'Test'")
        .Or("Property2 eq 'Test'")
        .And("Property3 eq 'Test'"))
    .And(filter => filter
        .Where("Property4 eq 'Test'"))
    .Build();

Output: (Property2 eq 'Test' or Property2 eq 'Test' and Property3 eq 'Test') and (Property4 eq 'Test')

Filter Transformations

Manually transform filter before outputting the results.

This is useful when you want to apply a filter conditionally.

var filter = new ODataFilterBuilder()
    .Where(filter => filter
        .Where("Property2 eq 'Test'")
        .Or("Property2 eq 'Test'")
        .And("Property3 eq 'Test'")
        .WithTransform(_ => string.Empty))
    .And(filter => filter
        .Where("Property4 eq 'Test'"))
    .Build();

Output: (Property4 eq 'Test')

OData Select Builder

var results = new ODataSelectBuilder()
    .Property("Test1")
    .Property("Test2")
    .Build();
or
var results = new ODataSelectBuilder()
    .Properties("Test1", "Test2")
    .Build();

Output: Test1,Test2

OData Request Builder

Build a full request with support for paging.

var oDataRequest = new ODataRequestBuilder<ExampleModel>()
    .WithFilter(config => config
        .Where("ProjectsPublished/ProjectStage eq Microsoft.Dynamics.DataEntities.ProjStatus'InProcess'")
        .Or(filter => filter
            .Where("ProjectsPublished/ProjectStage eq Microsoft.Dynamics.DataEntities.ProjStatus'Completed'")
            .And($"ProjectsPublished/ActualEndDate le {DateTime.Today.AddMonths(-1).ToString("yyyy-MM-dd")}"))
        .WithParameterName("filters")
        .WithTransform(filter => $"({filter})"))
    .WithPaging(config => config
        .WithPageSize(10)
        .WithParameterNames("limit", "offset")
        .NextPageWhen((results, _) => results.Count > 0));

var results = await oDataRequest.ExecuteAsync(async request =>
{
    var response = await client.GetAsync($"api/v1/data?{request.Query}");
    var data = await response.Content.ReadFromJsonAsync<IEnumerable<ExampleModel>>();

    return data ?? Enumerable.Empty<ExampleModel>();
});

Results will be combined and returned as a single collection.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.3 21,221 2/16/2023
1.0.2 505 10/21/2022
1.0.1 397 10/21/2022
1.0.0 398 10/21/2022