Skip to content
Ulaş Hasan edited this page Aug 21, 2025 · 1 revision

FluentDynamics.QueryBuilder

Introduction

FluentDynamics.QueryBuilder is a fluent, chainable API for building and executing Microsoft Dynamics 365/Dataverse queries. It simplifies the process of creating complex QueryExpressions with a more intuitive and readable syntax.

Installation

Install via NuGet Package Manager:

Install-Package FluentDynamics.QueryBuilder

Or via .NET CLI:

dotnet add package FluentDynamics.QueryBuilder

Basic Usage

using FluentDynamics.QueryBuilder;
using Microsoft.Xrm.Sdk;

// Create a simple query
var query = Query.For("account")
    .Select("name", "accountnumber", "telephone1")
    .Where(f => f.Equal("statecode", 0))  // Active accounts
    .OrderBy("name");

// Execute the query
EntityCollection results = query.RetrieveMultiple(organizationService);

// Process results
foreach (var account in results.Entities)
{
    Console.WriteLine($"Account: {account.GetAttributeValue<string>("name")}");
}

Key Features

  • Fluent API - Chainable, intuitive query building
  • Type-safe - Strong typing for Dynamics 365 operations
  • Async Support - Full support for async/await patterns
  • LINQ-like Operations - Familiar extension methods for query results
  • Pagination - Built-in support for handling paged results
  • Complex Joins - Easily create and configure link-entity operations
  • FilterBuilder Extensions - Syntactic sugar for common conditions (Equal, In, Like, etc.)

Advanced Examples

Complex Filtering

var query = Query.For("contact")
    .Select("firstname", "lastname", "emailaddress1")
    .Where(f => f
        .Equal("statecode", 0)
        .And(a => a
            .LastXDays("createdon", 30)
            .IsNotNull("emailaddress1")
        )
        .Or(o => o
            .Equal("address1_city", "Seattle")
            .Contains("description", "VIP")
        )
    )
    .OrderBy("lastname");

Entity Relationships (Joins)

var query = Query.For("opportunity")
    .Select("name", "estimatedvalue")
    .Link("account", "customerid", "accountid", JoinOperator.Inner, link => {
        link.Select("name", "accountnumber")
            .As("account")
            .Where(f => f.Equal("statecode", 0));
    });

Pagination

// Get specific page
var page2 = query.RetrieveMultiple(service, pageNumber: 2, pageSize: 50);

// Retrieve all pages automatically
var allResults = await query.RetrieveMultipleAllPagesAsync(service);

API Overview

  • Query.For(entityName) - Entry point for building queries
  • Select, SelectAll - Specify which fields to return
  • Where - Add filtering conditions
  • OrderBy, OrderByDesc - Add sorting
  • Link - Create relationships between entities
  • Top - Limit number of records
  • RetrieveMultiple, RetrieveMultipleAsync - Execute queries

Resources


Last updated: 2025-08-21 by ulaserkus