using System.Collections.Generic;
using System.Threading.Tasks;
using Remote.Linq.Expressions;
public Test(Guid id, string name, int score)
public Guid Id { get; set; }
public string Name { get; set; }
public int Score { get; set; }
public static async Task Main()
List<Test> dataSource = new List<Test>()
new Test(Guid.NewGuid(), "Ben", 1),
new Test(Guid.NewGuid(), "Brandon", 50),
new Test(Guid.NewGuid(), "Blake", 100),
new Test(Guid.NewGuid(), "Bridget", 150),
new Test(Guid.NewGuid(), "Brock", 200),
new Test(Guid.NewGuid(), "Mike", 250),
new Test(Guid.NewGuid(), "Paul", 300)
Func<Expression, Task<IEnumerable<DynamicObject>>> dataProvider = (expression) =>
Type expressionType = expression.GetType();
JsonSerializerSettings serializerSettings = new JsonSerializerSettings().ConfigureRemoteLinq();
string serializedExpression = JsonConvert.SerializeObject(expression, serializerSettings);
Console.WriteLine($"expression json = {serializedExpression}");
Expression deserializedExpression = (Expression)JsonConvert.DeserializeObject(serializedExpression, expressionType, serializerSettings);
return Task.FromResult(expression.Execute((type) => dataSource.AsQueryable()));
var results = await RemoteQueryable.Factory.CreateQueryable<Test>(dataProvider)
.Where(x => x.Score > 100)
Console.WriteLine($"results:");
foreach (Test test in results)
{ Console.WriteLine($"{test.Id} - {test.Name} - {test.Score}"); }