In [1]:
#r "nuget:DynamicQueryable,2.*"
using System.Linq;
using System.Linq.Dynamic;
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)));
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