1234567891011121314151617181920212223242526272829303132333435 |
- using System;
- using System.Linq.Expressions;
- using Luticate2.Auth.Dbo;
- using Luticate2.Auth.Dbo.Pagination;
- using Luticate2.Auth.Dbo.Result;
- using Microsoft.CodeAnalysis.CSharp.Scripting;
- using Microsoft.CodeAnalysis.Scripting;
-
- namespace Luticate2.Auth.Business.Pagination
- {
- public class LuFilterParser
- {
- public static LuResult<LuFilterDbo> Parse<T>(string data)
- {
- if (string.IsNullOrWhiteSpace(data))
- {
- data = "true";
- }
- var completeData = $"(x) => ({data})";
- try
- {
- var options = ScriptOptions.Default.AddReferences(typeof(LuFilterParser).Assembly);
- var expr = CSharpScript.EvaluateAsync<Expression<Func<T, bool>>>(completeData, options).Result;
- return LuResult<LuFilterDbo>.Ok(new LuFilterDbo
- {
- Expression = expr
- });
- }
- catch (Exception e)
- {
- return LuResult<LuFilterDbo>.Error(LuStatus.InputError.ToInt(), e, "Failed to parse filter expression");
- }
- }
- }
- }
|