bcquality/microsoft/knowledge/performance/use-isempty-for-existence-check.md
Jesper Schulz-Wedde b6da405376 Improve partner onboarding and documentation navigation
Lead with a complete plugin quick start and add task-oriented usage, troubleshooting, customization, and contribution guides. Preserve the broader plugin framing, correct conflicting contract guidance, support Agents folder reviews, and align repository validation. Convert existing sample references to clickable links without changing knowledge rules.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-09 17:25:29 +02:00

1.4 KiB

bc-version domain keywords technologies countries application-area
all
performance
isempty
count
findfirst
existence-check
exists
al
w1
all

Use IsEmpty for existence checks, not Count() or FindFirst()

Description

When the caller only needs to know whether any row matches a filter, IsEmpty() is the API designed for the question. Per the upstream guidance, "IsEmpty() is more efficient as it stops at first record found." Count() > 0 materializes a count the caller does not need; FindFirst() materializes a row the caller does not need. Both do work that IsEmpty does not.

Best Practice

Phrase existence checks as if not Record.IsEmpty() then ... (or if Record.IsEmpty() then ... for the negative). Apply filters via SetRange/SetFilter before the call so the existence check runs against the intended subset. Reserve Count for cases where the actual number matters and FindFirst for cases where the record fields are read.

See sample: use-isempty-for-existence-check.good.al.

Anti Pattern

if Customer.Count() > 0 then ... and if Customer.FindFirst() then ... (when the record is discarded) — both are flagged by the upstream guidance as the wrong tool. The first asks the database for the full count; the second asks for a row's fields. Both answers go unused.

See sample: use-isempty-for-existence-check.bad.al.