In [1]:
#r "nuget:DynamicQueryable,2.*"

using System.Linq;
using System.Linq.Dynamic;


Installing package DynamicQueryable..............done!
Successfully added reference to package DynamicQueryable, version 2.0.25

In [ ]:
public class Order {
    public int Id { get; set; }
    public double Price;
}

var orders = new List<Order> {
    new Order { Id = 1, Price = 42 },
    new Order { Id = 2, Price = 81 },
    new Order { Id = 3, Price = 34 },
    new Order { Id = 4, Price = 117 },
    new Order { Id = 5, Price = 289 },
    new Order { Id = 6, Price = 3 }
};

var query = orders.AsQueryable();

You can use inline values


In [ ]:
var r1 = query.Where("o => o.Price > 100").Take(1).ToList();
Console.WriteLine(string.Join(", ", r1.Select(o => o.Id)));

Or you can pass ordered values, @0 will be replaced with first argument


In [ ]:
var r2 = query.Where("o => o.Price < @0", 50).ToList();
Console.WriteLine(string.Join(", ", r2.Select(o => o.Id)));

Or you can use named variables, AvgId will be replaced with value from given dictionary


In [ ]:
var prms = new Dictionary<string, object> { { "avgId", 3 } };
var r3 = query.Where("o => o.Id > avgId", prms).ToList();
Console.WriteLine(string.Join(", ", r3.Select(o => o.Id)));

Supported Methods

Aggregate, All, Any, Average, Concat, Contains, Count, DefaultIfEmpty, Distinct, Except, ElementAt, ElementAtOrDefault, First, FirstOrDefault, GroupBy, GroupJoin, Intersect, Join, Last, LastOrDefault, LongCount, Max, Min, OrderBy, OrderByDescending, Reverse, Select, SelectMany, SequenceEqual, Single, SingleOrDefault, Skip, SkipWhile, Sum, Take, TakeWhile, ThenBy, ThenByDescending, Union, Where, Zip