CSharp · Console
// Entity Framework Classic
// Doc: https://entityframework-classic.net/linq-dynamic
// @nuget: Z.EntityFramework.Classic
// @nuget: Newtonsoft.Json
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using Newtonsoft.Json;
using Z.Expressions;
public class Program
{
public static void Main()
{
GenerateData();
var json = @"
[
{
'Method': 'Where',
'Field': 'Name',
'Operation': '==',
'Value': '""Customer_A""',
},
{
'Method': 'Where',
'Expression': 'Description.Contains(""ZZZ Projects"")',
}
]
";
var queryCriterias = JsonConvert.DeserializeObject<List<Criteria>>(json);
using (var context = new EntityContext())
{
var query = context.Customers.AsQueryable();
foreach(var qc in queryCriterias)
{
if(qc.Method == "Where")
{
if(!string.IsNullOrEmpty(qc.Expression))
{
var queryExec = query.Execute<IEnumerable<Customer>>("Where(x => x." + qc.Expression + ")");
FiddleHelper.WriteTable("Where(x => x." + qc.Expression + ")",((IEnumerable<Object>)queryExec).ToList());
}
else
{
var expression = "x.[Field] [Operation] [Value]"
.Replace("[Field]", qc.Field)
.Replace("[Operation]", qc.Operation)
.Replace("[Value]", qc.Value);
var queryExec = query.Execute<IEnumerable<Customer>>("Where(x => " + expression + ")");
FiddleHelper.WriteTable("Where(x => " + expression + ")",((IEnumerable<Object>)queryExec).ToList());
}
}
}
}
}
public static void GenerateData()
{
using (var context = new EntityContext())
{
context.Customers.Add(new Customer() { Name = "Customer_A", Description = "ZZZ Projects"});
context.Customers.Add(new Customer() { Name = "Customer_A", Description = "Description"});
context.Customers.Add(new Customer() { Name = "Customer_B", Description = "Description"});
context.SaveChanges();
}
}
public static string GetTitle(Expression expression)
{
return expression.ToString().Substring(expression.ToString().IndexOf(".Where"));
}
public class EntityContext : DbContext
{
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
{
}
public DbSet<Customer> Customers { get; set; }
}
public class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class Criteria
{
public string Method { get; set; }
public string Field { get; set; }
public string Operation { get; set; }
public string Value { get; set; }
public string Expression { get; set; }
}
}