FastExpressionCompiler 2.0.0

FastExpressionCompiler is 10-40x times faster than Expression.Compile()

Install-Package FastExpressionCompiler -Version 2.0.0
dotnet add package FastExpressionCompiler --version 2.0.0
<PackageReference Include="FastExpressionCompiler" Version="2.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add FastExpressionCompiler --version 2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Release Notes

v2.0.0
Developed with a help of @jogibear9988, @dzmitry-lahoda, @MaceWindu,
and other contributors - kudos to all of them!

- removed: `ExpressionInfo` was moved into separate package `FastExpressionCompiler.LigthExpression`
with all the functionality of the FEC. The `ExpressionInfo` itself was renamed to `Expression` for more simple drop-in replacement.

- added: #57 Consider signed package version!
- added: #59 Support compiling delegates with ref and out parameters
- added: #78 Lambda<Func<int>>(Block(Label(Label(typeof(int)), Constant(7)))) is not supported
- added: #88 Lambda<Func<IntPtr>>(Block(Constant(IntPtr.Zero)))
- added: #91 Support for MultiplyAssign, AddAsiggn, DivideAssign
- added: #98 % and bit operators are not supported
- added: #101 Some Assign Modes are not yet supported
- added: #102 Label and Goto Expression not yet implemented
- added: #105 Bit Expression Types are not yet supported
- added: #106 ExpressionType.Power not supported
- added: #107 Check if xxxAssigns also work with Variables
- added: #118 Support for Expression.Variable (in a Expression.Block)
- added: #127 Switch is not supported
- added: #130 Net Framework Expression compiler generates perfromanter Code for isNull check
- added: #138 Optimize Compilation of nested Lambdas

- fixed: #83 Issues with linq2db tests
- fixed: #92 Expression not compilable
- fixed: #93 Comparison to "null" does not work when not Typed
- fixed: #95 Ref support not yet working completely
- fixed: #124 LightExpression wrong Type
- fixed: #131 Linq2db - Test for JIT compiler internal limitation
- fixed: #137 Problem with Reading & Writing of Struct Fields.
- fixed: #146 Boolean parameter value changed from false to true
- fixed: #147 'Common Language Runtime detected an invalid program' with int.TryParse
- fixed: #151 'Attempt to read protected memory'
- fixed: #152 int.MinValue access throws 'Method not supported'
- fixed: #154 Equals Expression does not call "Equals" of class (in MS Code)
- fixed: #156 Invoking an Action constant fails with 'Common Language Runtime detected an invalid program'
- fixed: #159 Condition with converted numeric comparisons gives unexpected result
- fixed: #162 Float - short numeric comparisons with conversions gives unexpected result
- fixed: #163 Add of Nullable Int, etc does not work correctly
- fixed: #165 Int and Decimal to Double conversion issues
- fixed: #170 Problems with ref parameters
- fixed: #172 Using FEC to compile a property setter with an enum value sets the property to random values

NuGet packages (17)

Showing the top 5 NuGet packages that depend on FastExpressionCompiler:

Package Downloads
Miruken
Miruken handles your application
ExpressionToCodeLib
Generates valid, readable C# from an expression tree, and can annotate that code with runtime values. Useful for e.g. code generation and unit testing assertions.
Dos.ORM
Dos.ORM(原Hxj.Data)于2009年发布、2015年正式开源,支持Core,该组件已在大量成熟项目中应用。初期开发过程中参考了NBear与MySoft,吸取了他们的一些精华,加入新思想,后期参考EF的Lambda语法进行大量扩展。官方网站:https://www.ITdos.com/Dos/ORM/Index.html,交流QQ群:60831381。
TestBase
*TestBase* gives you a flying start with - fluent assertions that are easy to extend - sharp error messages - tools to help you test with “heavyweight” dependencies on - AspNetCore.Mvc, AspNet.Mvc or WebApi Contexts - HttpClient - Ado.Net - Streams & Logging - Mix & match with your favourite test runners & assertions. ``` UnitUnderTest.Action() .ShouldNotBeNull() .ShouldEqualByValueExceptFor(new {Id=1, Descr=expected}, ignoreList ) .Payload .ShouldMatchIgnoringCase("I expected this") .Should(someOtherPredicate); .Items .ShouldAll(predicate) .ShouldContain(item) .ShouldNotContain(predicate) .Where(predicate) .SingleOrAssertFail() .ShouldEqualByValue().ShouldEqualByValueExceptFor(...).ShouldEqualByValueOnMembers() work with all kinds of object and collections, and report what differed. string.ShouldMatch(pattern).ShouldNotMatch().ShouldBeEmpty().ShouldNotBeEmpty() .ShouldNotBeNullOrEmptyOrWhiteSpace().ShouldEqualIgnoringCase() .ShouldContain().ShouldStartWith().ShouldEndWith().ShouldBeContainedIn(), ... numeric.ShouldBeBetween().ShouldEqualWithTolerance()....GreaterThan....LessThan...GreaterOrEqualTo ... ienumerable.ShouldAll().ShouldContain().ShouldNotContain().ShouldBeEmpty().ShouldNotBeEmpty() ... stream.ShouldHaveSameStreamContentAs().ShouldContain() value.ShouldBe().ShouldNotBe().ShouldBeOfType().ShouldBeAssignableTo()... ``` TestBase.HttpClient.Fake ``` new FakeHttpClient() .Setup(x=>x.RequestUri.PathAndQuery.StartsWith("/this")) .Returns(response) .Setup(x=>x.Method==HttpMethod.Put) .Returns(new HttpResponseMessage(HttpStatusCode.Accepted)); ``` TestBase.AdoNet ------------------ `FakeDbConnection` ``` - db.SetupForQuery(…) - db.SetupForExecuteNonQuery(…) - db.ShouldHaveUpdated("tableName", …) - db.ShouldHaveSelected("tableName", …) - db.ShouldHaveDeleted("tableName", …) - db.Verify( x=>x.CommandText.Matches("Insert [case] .*") && x.Parameters["id"].Value==1 ) - db .ShouldHaveInvoked(cmd => predicate(cmd)) .ShouldHaveParameter("name", value) ``` `RecordingDbConnection` TestBase.Mvc.AspNetCore & TestBase.Mvc for Mvc 4 & Mvc 5 -------------------------------------------------------- ``` ControllerUnderTest.WithControllerContext() .Action() .ShouldbeViewResult() .ShouldHaveModel<TModel>() .ShouldEqualByValue(expected) ControllerUnderTest.Action() .ShouldBeRedirectToRouteResult() .ShouldHaveRouteValue("expectedKey", [Optional] "expectedValue"); ShouldHaveViewDataContaining(), ShouldBeJsonResult() etc. ``` - Test AspNetCore controllers with zero setup using `controllerUnderTest.WithControllerContext(actionUnderTest)` - Test more complex AspNetCore controller/application dependencies using `HostedMvcTestFixtureBase` and specify your MVCApplications `Startup` class. ``` [TestCase("/dummy")] public async Task Put_Should_ReturnA(string url) { var httpClient=GivenClientForRunningServer<Startup>(); GivenRequestHeaders(httpClient, "CustomHeader", "HeaderValue1"); var result = await httpClient.PutAsync(url, json); result.ShouldBe_202Accepted(); } ``` For Mvc4 and Mvc 5, fake your http request &amp; context, and use the `RegisterRoutes` method of your actual application to set up `Controller.Url` ``` ControllerUnderTest .WithHttpContextAndRoutes( RouteConfig.RegisterRoutes, "/incomingurl" ); ApiControllerUnderTest.WithWebApiHttpContext<T>( httpMethod, requestUri, routeTemplate) ``` Testable Logging ``` // Extensions.Logging.ListOfString var log = new List<String>(); ILogger mslogger= new LoggerFactory().AddStringListLogger(log).CreateLogger("Test2"); // Serilog.Sinks.ListOfString Serilog.Logger slogger= new LoggerConfiguration().WriteTo.StringList(log).CreateLogger(); ```
Mappy
Package Description

GitHub repositories (3)

Showing the top 3 popular GitHub repositories that depend on FastExpressionCompiler:

Repository Stars
MapsterMapper/Mapster
A fast, fun and stimulating object to object Mapper
itdos/Dos.ORM
Dos.ORM于2009年发布、2015年正式开源,该组件已在数百个成熟项目中应用。初期开发过程中吸取了NBear与MySoft的一些精华并加入新思想,之后参考EF Lambda语法进行大量扩展。经过数十个版本的更新迭代发布全新v2.0版本,支持动态列/表、分库/分表等。官方网站:https://www.itdos.com/dos/orm/Index.html 交流群:60831381
EamonNerbonne/ExpressionToCode
Generates valid, readable C# from an Expression Tree.

Version History

Version Downloads Last updated
2.0.0 128,488 1/25/2019
2.0.0-preview-03 800 11/9/2018
2.0.0-preview-02 612 10/25/2018
2.0.0-preview-01 334 10/24/2018
1.10.1 21,910 8/8/2018
1.10.0 424 8/3/2018
1.9.0 928 7/24/2018
1.8.0 13,376 6/24/2018
1.7.2 3,806 6/7/2018
1.7.1 7,977 3/27/2018
1.7.0 6,316 3/17/2018
1.6.0 11,809 12/3/2017
1.5.0 1,956 11/12/2017
1.4.0 6,366 9/9/2017
1.3.0 668 8/28/2017
1.2.2 977 8/8/2017
1.2.1 587 8/8/2017
1.2.0 578 8/8/2017
1.1.1 85,646 7/18/2017
1.1.0 524 7/13/2017
1.0.1 1,043 5/26/2017
1.0.0 932 4/2/2017
1.0.0-preview-04 543 3/31/2017
1.0.0-preview-03 774 3/30/2017
1.0.0-preview-02 525 3/29/2017
1.0.0-preview-01 623 3/23/2017