From caf2e3b2ae3f0617feb01257b41b16237e0204f4 Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Mon, 13 Jun 2016 11:38:46 +0200 Subject: [PATCH] Replaced DynamicLinq with DynamicExpresso --- Artemis/Artemis/Artemis.csproj | 8 ++-- .../Models/Profiles/LayerConditionModel.cs | 41 ++++++++++++++----- .../Modules/Effects/Bubbles/BubblesModel.cs | 1 + Artemis/Artemis/packages.config | 2 +- 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index a97a823b3..13907072e 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -148,6 +148,10 @@ ..\packages\CUE.NET.1.0.3\lib\net45\CUE.NET.dll True + + ..\packages\DynamicExpresso.Core.1.3.1.0\lib\net40\DynamicExpresso.Core.dll + True + ..\packages\gong-wpf-dragdrop.0.1.4.3\lib\net40\GongSolutions.Wpf.DragDrop.dll True @@ -205,10 +209,6 @@ - - ..\packages\System.Linq.Dynamic.1.0.6\lib\net40\System.Linq.Dynamic.dll - True - diff --git a/Artemis/Artemis/Models/Profiles/LayerConditionModel.cs b/Artemis/Artemis/Models/Profiles/LayerConditionModel.cs index 7b6fc0fb1..ee659913e 100644 --- a/Artemis/Artemis/Models/Profiles/LayerConditionModel.cs +++ b/Artemis/Artemis/Models/Profiles/LayerConditionModel.cs @@ -1,12 +1,19 @@ -using System.Collections.Generic; -using System.Linq.Dynamic; +using System; using Artemis.Models.Interfaces; using Artemis.Utilities; +using DynamicExpresso; namespace Artemis.Models.Profiles { public class LayerConditionModel { + private readonly Interpreter _interpreter; + + public LayerConditionModel() + { + _interpreter = new Interpreter(); + } + public string Field { get; set; } public string Value { get; set; } public string Operator { get; set; } @@ -22,15 +29,29 @@ namespace Artemis.Models.Profiles return false; // Put the subject in a list, allowing Dynamic Linq to be used. - var subjectList = new List {(T) subject}; - bool res; if (Type == "String") - res = subjectList.Where($"{Field}.ToLower() {Operator} @0", Value.ToLower()).Any(); - else if (Type == "Enum") - res = subjectList.Where($"{Field} {Operator} \"{Value}\"").Any(); - else - res = subjectList.Where($"{Field} {Operator} {Value}").Any(); - return res; + { + return _interpreter.Eval($"subject.{Field}.ToLower() {Operator} value", + new Parameter("subject", typeof(T), subject), + new Parameter("value", Value.ToLower())); + } + + Parameter rightParam = null; + switch (Type) + { + case "Enum": + var enumType = _interpreter.Eval($"subject.{Field}.GetType()", new Parameter("subject", typeof(T), subject)); + rightParam = new Parameter("value", Enum.Parse(enumType, Value)); + break; + case "Boolean": + rightParam = new Parameter("value", bool.Parse(Value)); + break; + case "Int32": + rightParam = new Parameter("value", int.Parse(Value)); + break; + } + + return _interpreter.Eval($"subject.{Field} {Operator} value", new Parameter("subject", typeof(T), subject), rightParam); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Effects/Bubbles/BubblesModel.cs b/Artemis/Artemis/Modules/Effects/Bubbles/BubblesModel.cs index 7addca167..d97fd8d0e 100644 --- a/Artemis/Artemis/Modules/Effects/Bubbles/BubblesModel.cs +++ b/Artemis/Artemis/Modules/Effects/Bubbles/BubblesModel.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; +using System.Linq; using System.Windows; using Artemis.Managers; using Artemis.Models; diff --git a/Artemis/Artemis/packages.config b/Artemis/Artemis/packages.config index 48f0b98da..9c566c400 100644 --- a/Artemis/Artemis/packages.config +++ b/Artemis/Artemis/packages.config @@ -5,6 +5,7 @@ + @@ -20,7 +21,6 @@ - \ No newline at end of file