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