Skip to content

Instantly share code, notes, and snippets.

@ardacetinkaya
Created January 30, 2020 13:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ardacetinkaya/a94aee7a96c784e65643491d0e19b64d to your computer and use it in GitHub Desktop.
Save ardacetinkaya/a94aee7a96c784e65643491d0e19b64d to your computer and use it in GitHub Desktop.
private async Task<Func<SomeEntity, bool>> Filters(string query)
{
if (string.IsNullOrEmpty(query)) return null;
try
{
var conditions = query.Split(';', StringSplitOptions.RemoveEmptyEntries);
StringBuilder conditionTexts = new StringBuilder();
foreach (var item in conditions)
{
var key = item.Split(':', StringSplitOptions.RemoveEmptyEntries)[0];
var value = item.Split(':')[1];
conditionTexts.Append($" data.{key}.ToLower().Contains(\"{ value.ToLower()}\") &&");
}
var filter = string.Format("data => {0}", conditionTexts.ToString().TrimEnd('&'));
var options = ScriptOptions.Default.AddReferences(typeof(SomeEntity).Assembly);
Func<SomeEntity, bool> filterExpression = await CSharpScript.EvaluateAsync<Func<SomeEntity, bool>>(filter, options);
return filterExpression;
}
catch (Exception)
{
Console.WriteLine($"Filter parse error. Please check your --filter. Ex: ColumnName:Data;Column2:Data2...");
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment