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