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': 'Any',
'Field': 'Name',
'Operation': '==',
'Value': '""Customer_A""',
},
{
'Method': 'Any',
'Expression': 'Description.Contains(""ZZZ Projects"")',
} ,
{
'Method': 'Any',
'Expression': 'Description.Contains(""Fiddle"")',
}
]
";
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 == "Any")
{
if(!string.IsNullOrEmpty(qc.Expression))
{
var find = query.Any(x => "x." + qc.Expression);
Console.WriteLine("Expression : x." + qc.Expression + "\nAny Result : " + find );
}
else
{
var expression = "x.[Field] [Operation] [Value]"
.Replace("[Field]", qc.Field)
.Replace("[Operation]", qc.Operation)
.Replace("[Value]", qc.Value);
bool find = query.Any(x => expression);
Console.WriteLine("Expression : " + expression + "\nAny Result : " + find );
}
Console.WriteLine("\n");
}
}
}
}
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 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; }
}
}