Me and a friend created an open source & cross platform library which gives you the ability to create & execute logical structures from C# objects at runtime.


The original use case was to give users the ability to define basic arithmetic expressions through a rules builder interface, which they could then serialize & send to a backend.
We have since expanded the library to become very general and extensible with quite a few primitive types built in. The library works using a combination of the Interpreter & Visitor patterns (See the readme for more!).
I’m really quite happy with what we have created here & hope that others may find some use out of it in their own projects!
https://github.com/Aptacode/Expressions
What’s the difference between it and Linq.Expression + https://github.com/esskar/Serialize.Linq?
Ease of use by the look of it.
Nice work!
This caught my attention because I previously authored a C# evaluator which I used extensively in one of my projects, and I’m always interested in Expression Evaluators.
For those interested, my observations on this are:

Expressions in Aptacode are interpreted rather than compiled.
Arithmetic operators are using dynamic to be able to apply the operators between basically non-arithmetic types.
No Division operator?

The difference to LINQ.Expressions is that LINQ can be compiled to IL, which can then be executed as an Action or Func
The use of dynamic would mean that the DLR would create a compilation context around that callsite, and would basically be re-compiling the expression each time, although it might be able to cache if type information is available at the callsite.
C# devs
null reference exceptions

source