Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
155573 stories
·
33 followers

What it really takes to translate Shakespeare, with Daniel Hahn

1 Share

1193. Today, we talk to award-winning translator Daniel Hahn, author of "If This Be Magic," about what it really takes to translate Shakespeare, starting with the philosophical paradox at the heart of all translation: changing every single word while changing nothing at all. We look at the special challenges Shakespeare poses, including preserving rhyme and meter in languages that work completely differently.


Find Daniel's book "If This Be Magic"


🔗 Join the Grammar Girl Patreon.

🔗 Share your familect recording in Speakpipe or by leaving a voicemail at 833-214-GIRL (833-214-4475)

🔗 Watch my LinkedIn Learning writing courses.

🔗 Subscribe to the newsletter.

🔗 Take our advertising survey.

🔗 Get the edited transcript here.

🔗 Get Grammar Girl books.

| HOST: Mignon Fogarty

| Grammar Girl is part of the Quick and Dirty Tips podcast network.


  • Audio Engineer: Dan Feierabend
  • Director of Podcast: Holly Hutchings
  • Advertising Operations Specialist: Morgan Christianson
  • Marketing and Video: Nat Hoopes, Rebekah Sebastian
  • Podcast Associate: Maram Elnagheeb

| Theme music by Catherine Rannus.

| Grammar Girl Social Media: YouTubeTikTokFacebookThreadsInstagramLinkedInMastodonBluesky.


Hosted on Acast. See acast.com/privacy for more information.





Download audio: https://sphinx.acast.com/p/open/s/69c1476c007cdcf83fc0964b/e/6a2718b1427484b4a4dc0d7b/media.mp3
Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

We Work at Microsoft. Here's Our Real Take on Build 2026

1 Share
From: Microsoft Healthcare and Life Blog Videos
Duration: 33:54
Views: 15

Four Microsoft Solution Engineers sit down after Build 2025 and break down what actually caught our attention. No keynote replay, no marketing script. Just field-level perspective from people who work with enterprise customers every day.

We cover Scout (yes, we're already using it in real workflows), Agent 365 and what agent identity actually means for IT and security teams, the new Copilot Studio canvas, Web IQ and why it matters more than it sounds, M-Dash and what DevSecOps looks like when agents are doing the recon, Microsoft's in-house model lineup, and what it feels like when the product finally starts catching up to the vision.

Arlie brings the CISO lens. Thor covers the security and identity angle. Adam breaks down Power Platform and orchestration. I tie it back to what healthcare and enterprise customers are actually asking about.

Build felt different this year. Agents are doing things now, not just answering questions. That shift is real, and this conversation is us working through what it means from where we sit.

Read the whole story
alvinashcraft
12 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Microsoft Build NEWS and more... - Developer News 22&23/2026

1 Share
From: Noraa on Tech
Duration: 2:28
Views: 14

This week we have a handful of new features and news from Microsoft Build.

00:00 Intro
00:12 GitHub
00:59 Windows

-----

Links

GitHub
• Updates to GitHub Copilot billing and plans - https://github.blog/changelog/2026-06-01-updates-to-github-copilot-billing-and-plans/
• Claude Opus 4.8 is generally available for GitHub Copilot - https://github.blog/changelog/2026-05-28-claude-opus-4-8-is-generally-available-for-github-copilot/
• MAI-Code-1-Flash is now available for GitHub Copilot - https://github.blog/changelog/2026-06-02-mai-code-1-flash-is-now-available-for-github-copilot/
• Extend GitHub with agent apps - https://github.blog/changelog/2026-06-02-extend-github-with-agent-apps/
Windows
• Building the next generation of devices for developers: Surface RTX Spark Dev Box - https://blogs.windows.com/devices/2026/06/02/building-the-next-generation-of-devices-for-developers-surface-rtx-spark-dev-box/
• Build 2026: Furthering Windows as the trusted platform for development - https://blogs.windows.com/windowsdeveloper/2026/06/02/build-2026-furthering-windows-as-the-trusted-platform-for-development/
• Coreutils for Windows: Installer & Packaging - https://github.com/microsoft/coreutils
• Intelligent Terminal repo - https://github.com/microsoft/intelligent-terminal

Microsoft Build Session shown: https://www.youtube.com/watch?v=V6mdr7Lw1TA

-----

🐦X: https://x.com/theredcuber
🐙Github: https://github.com/noraa-junker
📃My website: https://noraajunker.ch

Read the whole story
alvinashcraft
26 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

It’s 2026. Why are databases still failing GDPR compliance audits?

1 Share

Seven years after GDPR came into force, European regulators have issued over 2,245 fines totalling nearly 5.65 billion euros — and enforcement shows no sign of slowing down. Yet most compliance conversations focus on legal and governance failures, while the deeper technical root causes go unaddressed.

This article examines three recurring database-layer failures documented in the EDPB’s 2026 enforcement findings: the complexity of executing erasure across relational schemas, the backup paradox that can silently undo compliant deletions, and the audit log contradiction that traps organizations between two competing obligations.

We then look at how SQL Server, PostgreSQL, Oracle, and MySQL each handle these requirements — and where the gaps remain.

The General Data Protection Regulation (GDPR) came into force in May 2018. By March 2025 – seven years later -European regulators had issued more than 2,245 recorded fines, totaling approximately 5.65 billion euros.

That’s according to the CMS GDPR Enforcement Tracker, but it’s not the only source we have to work with. DLA Piper’s 2025 GDPR fines and data breach survey reported 1.2 billion euros in fines issued in a single twelve-month period, across financial services, healthcare, retail, energy, and the public sector.

Yes – 1.2 billion euros in fines in just one year.

Why, exactly, is this happening?

The standard explanation for persistent GDPR compliance failures is that organizations have legal and governance problems. Insufficient consent mechanisms, inadequate privacy policies, and missing data protection officers – to name a few.

None of these, however, explain where a large share of the actual failures originate. Many of the recurring compliance gaps the GDPR enforcement record documents are technical database problems that no legal team can solve, and no policy document can paper over.

On February 18, 2026, the European Data Protection Board published the findings from its 2025 Coordinated Enforcement Framework action on the right to erasure under Article 17 of the GDPR. This was the fourth CEF action in four years, and 32 Data Protection Authorities across the European Economic Area (EEA) participated.

Nine launched formal investigations and, all in all, 23 fact-finding exercises were conducted across 764 controllers – spanning SMEs, multinationals, and public sector organizations.

ReedSmith’s analysis of the report summarized its central finding plainly, identifying seven systemic weaknesses, with the two most persistent and consequential being the absence of systematic internal data classification and the lack of automated deletion mechanisms. Both of these are database engineering problems.

This article works through three specific database-layer failures that the EDPB report and enforcement record document consistently. We’ll then examine how SQL Server, PostgreSQL, Oracle, and MySQL each approach the technical requirements – and where the gaps are on each platform.

The GDPR erasure problem is a database architecture problem – here’s why

Article 17 of the GDPR grants individuals the right to have their personal data erased when it’s no longer needed for the purpose for which it was collected.

The regulation calls for erasure without undue delay. In a simple flat database, this is manageable. In any production relational database of meaningful complexity, however, it’s one of the hardest technical requirements in the regulation.

Consider a normalized e-commerce schema. A table of customers, for example, holds a ton of personal data: name, email, address, date of birth. However, deleting the customer row in the customers table does not delete the data. It breaks referential integrity on every table that references it, unless you have decided in advance what to do with each dependency.

In this instance, the options available to you are:

Cascade the deletion through all dependent tables (which may violate financial record-keeping obligations for transaction data under accounting law).

Null the foreign keys and orphan the dependent records (which corrupts data integrity).

Pseudonymize the personal identifiers – replacing them with anonymous tokens that preserve structural relationships without identifying information.

The EDPB’s February 2026 report was explicit about two recurring failures here. First, many controllers relied on anonymization techniques that were weak or amounted to mere pseudonymization, leaving re-identification risks.

Important note

The EDPB is currently developing updated anonymization guidelines following the CJEU ruling in EDPS v SRB (Case C-413/23P). Controllers using pseudonymization as an erasure substitute are on uncertain legal ground until that guidance is issued.

Second, some controllers treated account deactivation as equivalent to erasure. A user deletes their account. The application removes the login credentials. The underlying personal data remains intact in the database. The EDPB was explicit that this does not satisfy Article 17. Deactivating an account is only a service-layer operation. Erasure means deleting or sufficiently anonymizing the personal data itself.

The backup paradox

Once the erasure is correctly executed in the live database, the compliance obligation does not end. It extends to every backup taken before the deletion occurred.

An organization taking daily database backups has a retention schedule. Backups from the last 30 days are stored online, while older backups are archived to cheaper storage. When a customer submits an erasure request, the database team correctly deletes all of that customer’s personal data from the live tables. The application then confirms the erasure.

Every backup taken before that deletion still contains the customer’s personal data in fully recoverable form. If any of those backups is restored during a disaster recovery event, a data investigation, or a development environment refresh, the deleted data reappears in the live system. The right to erasure has been satisfied in the live database, yet simultaneously undermined by the backup infrastructure.

The GDPR does not prescribe a specific technical approach to backup erasure, and supervisory authorities have taken varying positions.

The EDPB’s 2026 report found that half of the responding DPAs raised concerns that many controllers had no specific procedures for erasure in the backup context. Some controllers had no procedures at all, relying exclusively on automatic overwrite cycles. The report calls for the EDPB to issue guidance on what ‘without undue delay’ means specifically in the context of backups.

The practical compliance position, based on severalnines.com’s analysis of GDPR and database backups and enforcement practice, involves three things:

  1. Documenting your backup retention schedule clearly in your privacy notice;

  2. Ensuring that backup restoration does not re-introduce data that has been legitimately erased from live systems;

  3. Reducing backup retention periods for data categories that carry high erasure request volume.

Protect your data. Demonstrate compliance.

With Redgate, stay ahead of threats with real-time monitoring and alerts, protect sensitive data with automated discovery & masking, and demonstrate compliance with traceability across every environment.
Learn more

The audit log contradiction

Here’s a scenario that regularly catches well-intentioned organizations out in GDPR audits:

A data subject requests erasure. The database team executes the deletion correctly. Six months later, a supervisory authority requests evidence that the deletion was carried out.

The evidence for this should be in your audit logs. But audit logs, if they capture the content of operations, contain the personal data that was deleted. To produce the audit trail proving that you deleted the data, you must produce logs that contain the data you deleted.

This is a genuine regulatory tension between two legitimate obligations: the obligation to maintain audit trails for accountability and security, and the obligation to erase personal data on request. The resolution is to design audit logging so that it captures what happened, without capturing the content of what changed.

What does a GDPR-compliant audit entry look like?

A GDPR-compliant audit entry looks like: ‘Customer record with internal ID 847392 was deleted at 14:23 UTC on 2025-03-15 by process data-erasure-job.’ It does not contain the customer’s name, email, or any other personal data. Most default audit logging configurations for all four major database platforms do not produce entries in this format without deliberate configuration.

Building this kind of audit logging requires the following:

  1. Deciding in advance what the log entry should capture;

  2. Configuring the database audit tooling to capture at the right level of detail;

  3. Testing that the resulting logs contain what a regulator would need to see, without containing what the regulation prohibits being retained.

Data retention: why policy is not a technical control

Nearly every organization subject to the GDPR has a data retention policy. Most of them say something like: ‘personal data will be deleted after two years following the end of the customer relationship, unless legal obligations require longer retention.’

The EDPB’s 2026 report identified this explicitly: many organizations have policies but no automated deletion mechanisms to enforce them.

Data accumulates for five, seven, or ten years because the policy says two years, but nothing in the database actually enforces it.

Building automated retention enforcement in a relational database is not trivial. It requires a complete inventory of which tables contain personal data subject to retention obligations. It also requires documented mapping of legal retention periods to specific database objects, because different data categories have different requirements.

Financial transaction data, for example, may have a legal obligation to be retained for seven to ten years under accounting law – even after the customer relationship has ended. Marketing profile data, meanwhile, may need to be deleted within months.

It requires cascade logic that handles dependent tables correctly without breaking referential integrity or downstream applications. And it requires testing that the automated deletion processes run on schedule, handle edge cases, and do not produce errors that cause the deletion jobs to fail silently.

Ultimately, this is a database engineering project. It requires schema knowledge, a data inventory, and coordination between the database team and the legal team. The latter defines the retention requirements, while the former has to actually build the implementation.

In most organizations failing GDPR audits on retention, these two teams have never had that conversation in sufficient technical detail.

Platform by platform: where does each database sit when it comes to GDPR?

SQL Server and GDPR

SQL Server has mature capabilities for most of what GDPR’s technical requirements demand.

First, SQL Server Audit provides comprehensive event logging at both the server and database level. Then there’s Always Encrypted, which allows column-level encryption where even database administrators cannot read the encrypted values without the column encryption keys. And finally, Row-Level Security enables fine-grained access control, and Transparent Data Encryption protects data at rest.

The challenge is configuration, not capability. SQL Server Audit is powerful but requires deliberate policy design to capture what GDPR audits need without capturing the personal data content of every operation.

Organizations that deployed SQL Server Audit years ago for a different compliance purpose, PCI, SOX, or internal auditing, often have audit policies that do not satisfy the Article 17 accountability requirements regulators now look for. Revisiting that configuration is work that most teams defer until an audit forces the issue.

Fast, reliable and consistent SQL Server development…

…with SQL Toolbelt Essentials. 10 ingeniously simple tools for accelerating development, reducing risk, and standardizing workflows.
Learn more & try for free

PostgreSQL and GDPR

PostgreSQL’s native audit capabilities are limited for GDPR compliance purposes.

The core postgresql.conf logging settings can capture connections, queries, and errors. However, they’re not designed for fine-grained data access auditing, and don’t produce the structured logs that GDPR audits require without significant configuration.

The standard solution for production PostgreSQL environments handling regulated data is pgaudit. This is an open-source extension that provides session-level and object-level audit logging equivalent to what enterprise database products offer natively.

pgaudit can log who accessed which tables and when (at the row level if needed), without capturing the content of the data accessed. Organizations running PostgreSQL for GDPR-regulated workloads without pgaudit (or a commercial equivalent) frequently discover that they have no adequate audit trail for the period preceding the audit. Building the trail after the fact is not an option.

Oracle and GDPR

Oracle’s Unified Auditing, introduced in Oracle 12c and the default audit architecture from Oracle 21c onward, provides the most comprehensive out-of-box audit capabilities of the four platforms covered here.

Fine-grained auditing allows audit policies to capture specific columns in specific tables under specific conditions. Oracle Label Security provides row-level classification. And, finally, Oracle Data Masking and Subsetting enables pseudonymization at the column level.

Oracle’s compliance tooling is mature enough for GDPR requirements. The challenge is that complex Oracle environments often have audit configurations that were established during initial deployment and then forgotten about as the data processing activities of the business evolved.

An audit policy that captured what was required for a 2017 PCI audit, for example, may not capture what’s needed for an Article 17 compliance review in 2026.

MySQL and GDPR

MySQL’s audit story depends on which edition you’re running. MySQL Enterprise Edition includes the MySQL Enterprise Audit plugin, which provides comprehensive session and query-level audit logging suitable for compliance use. However, MySQL Community Edition – which a substantial number of organizations run for cost reasons – does not include a native audit plugin.

Third-party and open-source audit solutions exist for MySQL Community, but many organizations running MySQL Community for GDPR-regulated workloads haven’t implemented any of them. The result is a compliance gap that is not immediately obvious from looking at the database configuration.

An organization can have MySQL running correctly, handling data reliably, with no error logs or signs of trouble – yet not have an audit trail that could satisfy a regulatory request for evidence of erasure execution.

Why a data inventory is so important in 2026

The EDPB’s report identified the absence of systematic internal data classification as one of the two most consequential weaknesses it found. This is the root problem that makes everything else harder. Every other technical control depends on knowing what data you have, where it lives, and what applies to it.

Without a data inventory, you have the following issues:

  1. You can’t implement automated retention enforcement, because you don’t know which tables to apply it to!

  2. You can’t respond completely to erasure requests…because you can’t identify all the places where the requested data exists.

  3. You cannot configure meaningful audit logging, because you don’t know which tables require it.

  4. You cannot assess your backup exposure, because you don’t know which backup archives contain regulated data.

What a data inventory must include to satisfy GDPR compliance

A data inventory for GDPR purposes is a documented record of:

  1. Which tables in which databases contain personal data subject to the GDPR;

  2. What categories of personal data each table contains (contact information, financial data, health data, behavioral data);

  3. The legal basis for processing;

  4. The applicable retention period;

  5. The dependent tables that reference the personal data.

    AWS’s GDPR compliance guidance for Redshift describes a similar inventory-first approach as the prerequisite for implementing the right to erasure technically, and the same logic applies across platforms.

In summary

For legacy systems with years of accumulated schema changes and undocumented tables, building this inventory is genuinely difficult work. Starting with the tables that receive the highest volume of erasure requests, and building outward from there, produces the most compliance value for the most effort in the shortest time.

The EDPB’s 2026 coordinated enforcement action on erasure is the fourth in four years. The 2026 action will focus on transparency and information obligations. The scrutiny is not ending with erasure. Organizations that built a data inventory to address erasure compliance are positioned to respond to the next wave. Organizations that did not, are likely to be unprepared for both.

FAQs: Why databases are still failing GDPR compliance audits in 2026

1. What is Article 17 of the GDPR?

Article 17 grants individuals the right to request deletion of their personal data when it is no longer needed for the purpose it was collected. Organizations must act without undue delay, which applies not just to live databases but to all systems where that data exists.

2. Does deleting a user account satisfy a GDPR erasure request?

No. Deactivating or deleting an account is a service-layer operation. The EDPB has been explicit that unless the underlying personal data is deleted or sufficiently anonymized in the database itself, the erasure obligation under Article 17 is not met.

3. Do GDPR erasure obligations apply to database backups?

Yes, and this is one of the most practically difficult aspects of compliance. Backups taken before a deletion still contain the erased data in recoverable form. While the EDPB has yet to issue definitive guidance on timelines for backup erasure, organizations are expected to have documented procedures and reduced retention periods for high-risk data categories.

4. What is the difference between anonymization and pseudonymization under GDPR?

Pseudonymization replaces personal identifiers with tokens but the original data can still be re-identified with a key. True anonymization makes re-identification impossible. GDPR obligations, including the right to erasure, do not apply to genuinely anonymized data — but the EDPB has found that many organizations are using pseudonymization and incorrectly treating it as anonymization.

5. Which database platform has the strongest native GDPR compliance capabilities?

Oracle’s Unified Auditing and fine-grained audit policies provide the most comprehensive out-of-box tooling. SQL Server is also well-equipped but requires deliberate configuration. PostgreSQL requires the pgaudit extension for adequate audit logging. MySQL Community Edition has no native audit plugin, making it the most challenging platform for regulated workloads without additional tooling.

6. What is a data inventory and why does GDPR require one?

A data inventory is a documented record of which tables contain personal data, what categories they hold, the legal basis for processing, applicable retention periods, and dependent table relationships. Without one, organizations cannot implement automated deletion, respond completely to erasure requests, configure meaningful audit logging, or assess backup exposure.

The post It’s 2026. Why are databases still failing GDPR compliance audits? appeared first on Simple Talk.

Read the whole story
alvinashcraft
51 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Building and Scaling a Platform with Project-as-a-Service

1 Share

When a platform started with total developer autonomy, teams felt overwhelmed and ended up solving the same problems in completely different ways. The company shifted to enablement over support, working together with teams intensively, and helping teams feel confident and capable, turning the right way into being the easiest way.

By Ben Linders
Read the whole story
alvinashcraft
57 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

AI-Powered Natural Language Filtering in .NET MAUI DataGrid

1 Share

AI-Powered Natural Language Filtering in .NET MAUI DataGrid

TL;DR: Skip complex filters, let users simply describe what they need. With our .NET MAUI DataGrid and Azure OpenAI, queries like “customers from New York” are instantly converted into accurate filters. The result is a faster, more intuitive, zero learning curve experience built on a clean, scalable architecture for modern cross-platform apps. Ready to see how this works in practice? Let’s dive in.

What if filtering thousands of rows in a grid felt as simple as typing a sentence?

Traditional filtering forces users into rigid patterns: dropdowns, exact field names, and predefined conditions. Most grids still expect users to think like developers, remember column names, pick operators, and navigate layered menus just to find what they need. It’s slow, unintuitive, and often frustrating.

Now imagine your users simply typing:

  • Orders above $500,
  • Show high-value customers, and
  • Products under $100

…and instantly seeing exactly what they asked for.

No clicks. No confusion. Just results.

That’s the power of AI‑powered natural language filtering.

In this blog, we’ll show you how to bring this smart, natural-language filtering to life using Syncfusion® .NET MAUI DataGrid and Azure OpenAI, so your apps feel less like tools and more like intelligent assistants.

Why natural language filtering matters

Natural language filtering transforms rigid, technical filtering into a simple, conversational experience. It lets users interact with data the way they naturally think, not the way the UI demands.

Key benefits

  • Faster data discovery.
    Skip menus and get instant results by simply describing what you need.
  • Zero learning curve.
    No need to remember column names, operators, or filter syntax.
  • Intuitive interaction.
    Users express intent in plain English, and AI handles the complexity behind the scenes.
  • Greater confidence.
    Explore data freely without worrying about making mistakes.

How it works

AI-powered filtering bridges the gap between human language and structured data by:

  • Understanding intent,
  • Translating it into precise filter logic, and
  • Delivering accurate results instantly.

The result: Faster insights, happier users, and a dramatically simpler, more engaging data experience.

Note: Before proceeding, refer to the getting started with .NET MAUI DataGrid documentation.

Prerequisites

  1. Visual Studio.
  2. Create a .NET MAUI application.
  3. An Azure OpenAI resource and a valid API key.

How to embed AI-powered natural-language filtering in .NET MAUI DataGrid?

Adding AI-powered filtering to the .NET MAUI DataGrid isn’t just about calling an API, it requires a clean and scalable architecture. By using the MVVM pattern, you can neatly separate UI, business logic, and data handling, while dependency injection ensures your AI services are consistently available across the app.

Step 1: Create the AI filtering service

At the core of this implementation is the AIFilterService. Its role is to convert user-friendly, natural-language queries into a structured format your DataGrid can understand and apply.

For example, a query like:

“Female employees with rating ≥ 8 and salary > 5000”

is transformed into a compact JSON-based filter plan.

Here’s what happens behind the scenes:

  • A schema-aware prompt is sent to Azure OpenAI to ensure responses align with your data structure.
  • The AI returns a cleaned JSON filter definition (removing code fences and noise).
  • The response is then validated and parsed into strongly typed models such as FilterPlan or Condition, with support for nested filter groups.

If anything goes wrong, such as a missing configuration or invalid JSON, the service safely returns null, ensuring your app remains stable.

Refer to the following code example for implementation details.

public class AIFilterService : IAIFilterService
{
    // Converts a natural language prompt into a JSON filter plan via Azure OpenAI.
    public async Task<FilterPlan?> CreateFilterPlanAsync(string naturalLanguagePrompt)
    {
        // Ensure Azure OpenAI settings are present
        if (string.IsNullOrWhiteSpace(AzureBaseService.Endpoint) ||
            string.IsNullOrWhiteSpace(AzureBaseService.DeploymentName) ||
            string.IsNullOrWhiteSpace(AzureBaseService.Key))
        {
            return null;
        }

        // Clear instructions: JSON filter plans only, aligned with your grid schema
        var system = "You convert plain English filters into strictly valid JSON filter plans for a data grid.";
        var user   = $"Grid schema:\n{SchemaText}\n\nUser query:\n{naturalLanguagePrompt}\n\nReturn JSON only.";

        try
        {
            // Call Azure OpenAI and get raw content
            var content = await CallAzureAsync(system, user);

            // Extract compact JSON (removes ```json fences, trims noise)
            var json = ExtractJsonObject(content);
            if (string.IsNullOrWhiteSpace(json))
                return null;

            // Parse JSON into a FilterPlan (parsing implemented elsewhere)
            return ParseFilterPlanFromJson(json);
        }
        catch
        {

            // Fail safe: return null on network/parse errors
            return null;
        }
    }
}

Step 2: Configuring AI services

Once your AI filtering service is ready, the next step is to make it available throughout your app. This is done during app startup by registering your services using dependency injection.

By configuring your AI service and ViewModel at this stage, you ensure they can be easily accessed wherever needed without manual instantiation or tight coupling.

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddAiServices(this IServiceCollection services)
    {
        services.AddSingleton<IAIFilterService, AIFilterService>();
        services.AddSingleton<EmployeesViewModel>();
        services.AddTransient<MainPage>();
        return services;
    }
}

Step 3: Integrating Azure OpenAI with your .NET MAUI app

To enable natural language filtering, your app needs to connect to Azure OpenAI, which powers the understanding and interpretation of user queries.

To do so:

  • First, ensure you have access to Azure OpenAI and create a deployment in the Azure portal.
  • If you do not have access, please refer to the create and deploy Azure OpenAI service guide to set up a new account.
  • Note down the deployment name, endpoint URL, and API key.
  • Make sure you’ve installed the Azure.AI.OpenAI NuGet package from the NuGet Gallery.
  • In your base service class (AzureBaseService), initialize the OpenAIClient.
  • Replace the Endpoint, DeploymentName, and Key with the actual values from your Azure OpenAI resource.
public abstract class AzureBaseService
{
    internal const string Endpoint = "YOUR_END_POINT";
    internal const string DeploymentName = "DEPLOYMENT_NAME";
    internal const string Key = "API_KEY";

    protected AzureBaseService() {}
}

Next, we’ll define the models that make this integration work seamlessly.

Step 4: Creating models for AI-ready filtering

Here, we’ll use a simple Employee model and a helper repository to seed data. This keeps our demo self-contained and repeatable.

The model class defines the structures for employees, filter plans, conditions, and nodes, and helps represent user queries in a structured way for dynamic data filtering.

public class Employee
{
    public int EmployeeId {get; set;}
    public string Name {get; set;} = "";
    public string Title {get; set;} = "";
    public int Rating {get; set;}
    public DateTime BirthDate {get; set;}
    public string Gender {get; set;} = "";
    public decimal Salary {get; set;}
}

Next, define a lightweight structure that represents the AI-generated filtering logic. Instead of applying filters directly, the AI returns a compact filter plan that can be evaluated against each row.

// Represents a complete filter plan generated by AI.
public class FilterPlan
{
    public string logic {get; set;} = "and";
    public List<FilterNode> conditions {get; set;} = new();
}

public class FilterNode
{
    public Condition? condition {get; set;}
    public FilterPlan? group {get; set;}
}

Step 5: Building the ViewModel for natural language filtering

The ViewModel acts as the brain of your AI-powered filtering experience, connecting user input, AI processing, and the DataGrid in a clean, responsive flow.

It is responsible for:

  • Managing user input (typed prompts or suggested queries),
  • Invoking the AI service to interpret natural language, and
  • Updating the DataGrid dynamically based on AI-generated filters.

At its core, the ViewModel maintains the employee collection along with the user’s prompt. It also provides ready-to-use suggestions, making it easier for users to try common queries without having to type them from scratch.

When a user enters a query like:  

“rating ≥ 8 and salary > 5000”,

… the ViewModel sends it to the AIFilterService. The AI then converts this into a structured FilterPlan. Once received, the ViewModel triggers a FilterChanged event, prompting the DataGrid to refresh and display filtered results instantly.

To apply the filter, the ViewModel exposes the BuildPredicate() method. This method converts the current filter plan into a predicate function, enabling the DataGrid to efficiently evaluate each row.

public class EmployeesViewModel : BindableObject
{
    // Helpful one-click suggestions
    public ObservableCollection<string> PromptSuggestions { get; } = new()
    {
        "Employees with rating >= 8 and salary > 5000",
        "Show only Female employees born before 1990",
        "Name contains 'Tom' or Title contains 'Supervisor'",
        "BirthDate between 01/01/1980 and 12/31/1989",
        "Salary between 3000 and 4000",
        "Gender in [Male, Female] and Rating > 5",
        "EmployeeId between 1005 and 1015"
    };

    public EmployeesViewModel(IAIFilterService ai)
    {
        _ai = ai;

        ExecutePromptCommand = new Command(async () => await ExecuteAsync());

        ResetCommand = new Command(() =>
        {
            CurrentPlan = null;
            SelectedSuggestion = null;
            Prompt = string.Empty;

            FilterChanged?.Invoke (this, EventArgs.Empty);
        });
    }

    private async Task ExecuteAsync()
    {
        var toRun = !string.IsNullOrWhiteSpace(Prompt) ? Prompt : (SelectedSuggestion ?? string.Empty);

        toRun = toRun.Trim();

        if (string.IsNullOrWhiteSpace(toRun))
        {
            CurrentPlan = null;
            FilterChanged?.Invoke(this, EventArgs.Empty);
            return;
        }

        // Ask AI to create a structured plan
        CurrentPlan = await _ai.CreateFilterPlanAsync(toRun);
        FilterChanged?.Invoke(this, EventArgs.Empty);
    }

    //DataGrid typically accepts a Predicate<object>. The ViewModel builds one from the current FilterPlan.
    public Predicate<object>? BuildPredicate()
    {
        if (CurrentPlan is null)
            return null;

        return rowObj => EvalPlan(CurrentPlan, (Employee)rowObj);
    }
}

Step 6: Designing the UI for AI-powered natural language filtering

Finally, bring everything together by creating a clean, intuitive UI that lets users interact with your DataGrid using natural language.

This layout is designed to be simple and focused, so users can type what they want and instantly see results without friction.

  • Smart input at the top.
    An editable Syncfusion .NET MAUI ComboBox allows users to either type a natural language query or quickly pick from suggested prompts.
  • Quick action controls.
    Two buttons: Execute Prompt and Reset make it easy to apply filters or clear them with a single click.
  • Dynamic DataGrid display.
    The Syncfusion .NET MAUI DataGrid displays employee data and updates instantly when a prompt is executed. ViewModel processes the query and applies a predicate, enabling real-time, intelligent filtering.

This simple yet powerful interface ensures users can ask, apply, and explore data effortlessly, turning your DataGrid into a responsive, AI-driven experience.

<Grid Grid.Row="0"
      ColumnDefinitions="*, Auto, Auto"
      ColumnSpacing="10"
      IsVisible="{OnPlatform Android=False, iOS=False, MacCatalyst=True, WinUI=True}">

    // Editable ComboBox for natural language prompts or quick suggestions
    <input:SfComboBox
        ItemsSource="{Binding PromptSuggestions}"
        SelectedItem="{Binding SelectedSuggestion}"
        Text="{Binding Prompt, Mode=TwoWay}"
        IsEditable="True"
        Placeholder="Ask AI to apply filter to DataGrid"
        HeightRequest="40" />

    // Button to run the current prompt via AI and apply the filter
    <Button Grid.Column="1"
               Text="Execute Prompt"
               Command="{Binding ExecutePromptCommand}" />

    // Button to clear the prompt, suggestion, and any active filters
    <Button Grid.Column="2"
               Text="Reset"
               Command="{Binding ResetCommand}" />

    // Binding DataGrid
    <sfgrid:SfDataGrid Grid.Row="1"
                          ItemsSource="{Binding Employees}"
                          ColumnWidthMode="Fill"
                          SortingMode="Multiple">
    </sfgrid:SfDataGrid>

</Grid>

See the final output image for better understanding.

Implementing AI-powered natural language filtering in .NET MAUI DataGrid
Implementing AI-powered natural language filtering in .NET MAUI DataGrid

GitHub reference

For more details, refer to the AI-powered natural language filtering in the .NET MAUI DataGrid GitHub demo.

Frequently Asked Questions

What happens if AI returns invalid JSON for a conversational filter query?

In such scenarios, the AIFilterService safely returns null, and the grid resets to show all data. This ensures the app never crashes due to malformed AI responses.

Does AI-powered natural language filtering in the .NET MAUI DataGrid work without an internet connection?

No. Since the filtering relies on Azure OpenAI, an active internet connection is required to process user prompts. If offline, you can still rely on the built-in filtering feature in the Syncfusion .NET MAUI DataGrid, but AI-driven natural language queries won’t function.

Will natural language filtering replace the built-in filtering features of Syncfusion DataGrid?

No. In this solution, natural language filtering is designed to enhance, not to replace existing DataGrid capabilities. Users can continue using column filters, sorting, and advanced filtering alongside AI-powered queries for a more flexible experience.

How can I improve the accuracy and consistency of AI-generated filters in this setup?

You can increase reliability by using schema-aware prompts, strict JSON output instructions, and deterministic generation settings. Always validate and parse JSON defensively.

How do I define the data schema so Azure OpenAI understands my DataGrid structure?

Include a concise schema description (field names, types, sample values, constraints) in the AI prompt. This guides the AI to produce output that matches your data model.

How can I handle date and numeric filters in natural language queries across different locales?

Be explicit in your schema or prompt about date and number formats (e.g., ISO date format yyyy-MM-dd and decimal separators). You can also preprocess user input or normalize values before sending them to the AI to avoid ambiguity across regions.

Supercharge your cross-platform apps with Syncfusion's robust .NET MAUI controls.

Switch from rigid filters to conversational data filtering

You’ve seen how AI can completely transform the way users interact with data. By combining Syncfusion .NET MAUI DataGrid with Azure OpenAI, you can replace complex, manual filtering with simple, conversational inputs, making your app faster, smarter, and far more intuitive.

Instead of forcing users to learn filters, you empower them to just ask and get results, even for complex, multi-condition queries.

So, don’t settle for traditional filtering; upgrade your app experience today with AI-powered natural language filtering.

Start building smarter, more intuitive .NET MAUI apps today and give your users an experience they’ll love.

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories