Create a C# lambda expression from a string (with Roslyn)
Sample code we’ll be trying to achieve
var discountedAlbums = albums.Where(x => x.Quantity > 100);
Building LINQ Expressions by hand
var parameter = Expression.Parameter(typeof(Album), "album"); var comparison = Expression.GreaterThan(Expression.Property(parameter, Type.GetType("ConsoleApp6.Album").GetProperty("Quantity")), Expression.Constant(100)); Func<Album, bool> discountFilterExpression = Expression.Lambda<Func<Album, bool>>(comparison, parameter).Compile(); var discountedAlbums = albums.Where(discountFilterExpression);
From string to lambda with Roslyn
var discountFilter = "album => album.Quantity > 0"; var options = ScriptOptions.Default.AddReferences(typeof(Album).Assembly); Func<Album, bool> discountFilterExpression = await CSharpScript.EvaluateAsync<Func<Album, bool>>(discountFilter, options); var discountedAlbums = albums.Where(discountFilterExpression);