XLibur.Report.DynamicLinq
0.200.0
dotnet add package XLibur.Report.DynamicLinq --version 0.200.0
NuGet\Install-Package XLibur.Report.DynamicLinq -Version 0.200.0
<PackageReference Include="XLibur.Report.DynamicLinq" Version="0.200.0" />
<PackageVersion Include="XLibur.Report.DynamicLinq" Version="0.200.0" />
<PackageReference Include="XLibur.Report.DynamicLinq" />
paket add XLibur.Report.DynamicLinq --version 0.200.0
#r "nuget: XLibur.Report.DynamicLinq, 0.200.0"
#:package XLibur.Report.DynamicLinq@0.200.0
#addin nuget:?package=XLibur.Report.DynamicLinq&version=0.200.0
#tool nuget:?package=XLibur.Report.DynamicLinq&version=0.200.0
XLibur.Report.DynamicLinq
ClosedXML.Report expression-syntax compatibility for XLibur.Report.
Install this only if you have templates written for ClosedXML.Report, with C# expressions inside
{{ }}. XLibur.Report's own engine needs nothing from here.
using XLibur.Report;
using XLibur.Report.DynamicLinq;
using var template = new XLTemplate("LegacyReport.xlsx", new DynamicLinqExpressionEngine());
template.AddVariable("Items", sales);
template.Generate();
template.SaveAs("Report-2026.xlsx");
A template's structure — defined-name-bound ranges, the options row, <<tags>>, the &= formula
prefix — means the same thing whichever engine evaluates its expressions. The expression language is
the only difference, so pointing an upstream template at this engine is usually all that is needed.
Supported: property and method access (item.Name.ToUpper()), arithmetic and comparison, the
conditional operator, and LINQ over collections in scope
(items.Where(x => x.Qty > 10).Sum(x => x.Total)). Inside a bound range the names are item, index
and items, and workbook variables are reachable by name or with an @ prefix.
Not supported: the Excel-function bridge ({{ SUM(...) }}). That is a feature of XLibur.Report's
default engine; upstream syntax never had it, and templates for this engine call .NET methods instead.
Trusted templates only
Dynamic LINQ has no sandbox. An expression it parses can reach the methods and properties of any object in scope, and the library's own history includes CVE-2023-32571 — arbitrary method invocation. Do not point this engine at a template a user uploaded. For that, use XLibur.Report's default Scriban engine, which has real execution limits and no reflection escape.
Licensed under the MIT License. Portions derived from
ClosedXML.Report (MIT) — see NOTICE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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 is compatible. 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 is compatible. 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. |
-
net10.0
- System.Linq.Dynamic.Core (>= 1.7.1)
- XLibur.Report (>= 0.200.0)
-
net8.0
- System.Linq.Dynamic.Core (>= 1.7.1)
- XLibur.Report (>= 0.200.0)
-
net9.0
- System.Linq.Dynamic.Core (>= 1.7.1)
- XLibur.Report (>= 0.200.0)
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 |
|---|---|---|
| 0.200.0 | 56 | 8/1/2026 |