# lambdaparser **Repository Path**: tiasys/lambdaparser ## Basic Information - **Project Name**: lambdaparser - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-08-14 - **Last Updated**: 2023-08-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NReco LambdaParser Runtime parser for string expressions (formulas, method calls, properties/fields/arrays accessors). `LambdaParser` builds dynamic LINQ expression tree and compiles it to the lambda delegate. Types are resolved at run-time like in dynamic languages. [![NuGet Release](https://img.shields.io/nuget/v/NReco.LambdaParser.svg)](https://www.nuget.org/packages/NReco.LambdaParser/) | [![AppVeyor](https://img.shields.io/appveyor/ci/nreco/lambdaparser/master.svg)](https://ci.appveyor.com/project/nreco/lambdaparser) * PCL (Portable) library: can be used with *any* .NET target: net40+sl5, net45+wp8+win8+wpa81, .NET Standards 1.3 (.NET Core apps) * any number of variables (values can be provided as dictionary or by callback delegate) * supports arithmetic operations (+, -, *, /, %), comparisons (==, !=, >, <, >=, <=), conditionals including (ternary) operator ( ? : ) * access object properties, call methods and indexers, invoke delegates * dynamic typed variables: performs automatic type conversions to match method signature or arithmetic operations * create arrays and dictionaries with simplified syntax: `new dictionary{ {"a", 1}, {"b", 2} }` , `new []{ 1, 2, 3}` Nuget package: [NReco.LambdaParser](https://www.nuget.org/packages/NReco.LambdaParser/) ``` var lambdaParser = new NReco.Linq.LambdaParser(); var varContext = new Dictionary(); varContext["pi"] = 3.14M; varContext["one"] = 1M; varContext["two"] = 2M; varContext["test"] = "test"; Console.WriteLine( lambdaParser.Eval("pi>one && 0 5 Console.WriteLine( lambdaParser.Eval("test.ToUpper()", varContext) ); // --> TEST ``` (see [unit tests](https://github.com/nreco/lambdaparser/blob/master/src/NReco.LambdaParser.Tests/LambdaParserTests.cs) for more expression examples) ## Custom values comparison By default `LambdaParser` uses `ValueComparer` for values comparison. You can provide your own implementation or configure its option to get desired behaviour: * `ValueComparer.NullComparison` determines how comparison with `null` is handled. 2 options: * `MinValue`: null is treated as minimal possible value for any type - like .NET IComparer * `Sql`: null is not comparable with any type, including another null - like in SQL * `ValueComparer.SuppressErrors` allows to avoid convert exception. If error appears during comparison exception is not thrown and this means that values are not comparable (= any condition leads to `false`). ``` var valComparer = new ValueComparer() { NullComparison = ValueComparer.NullComparisonMode.Sql }; var lambdaParser = new LambdaParser(valComparer); ``` ## Who is using this? NReco.LambdaParser is in production use at [SeekTable.com](https://www.seektable.com/) and [PivotData microservice](https://www.nrecosite.com/pivotdata_service.aspx) (used for user-defined calculated cube members: formulas, custom formatting). ## License Copyright 2016-2020 Vitaliy Fedorchenko Distributed under the MIT license