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);