Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 5479)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 5480)
@@ -162,4 +162,39 @@
     <Compile Include="Filters\ResultFloatValueValueFilter.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Query\Filters\AlgorithmClassNameFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmDataDataTypeNameFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmNameFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmParameterBlobValueDataTypeNameFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmParameterBlobValueValueFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmParameterBoolValueValueFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmParameterFloatValueValueFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmParameterIntValueValueFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmParameterNameFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmParameterStringValueValueFilter.cs" />
+    <Compile Include="Query\Filters\AlgorithmPlatformNameFilter.cs" />
+    <Compile Include="Query\Filters\AndFilter.cs" />
+    <Compile Include="Query\Filters\OrFilter.cs" />
+    <Compile Include="Query\Filters\ProblemClassNameFilter.cs" />
+    <Compile Include="Query\Filters\ProblemDataDataTypeNameFilter.cs" />
+    <Compile Include="Query\Filters\ProblemNameFilter.cs" />
+    <Compile Include="Query\Filters\ProblemParameterBlobValueDataTypeNameFilter.cs" />
+    <Compile Include="Query\Filters\ProblemParameterBlobValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ProblemParameterBoolValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ProblemParameterFloatValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ProblemParameterIntValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ProblemParameterNameFilter.cs" />
+    <Compile Include="Query\Filters\ProblemParameterStringValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ProblemPlatformNameFilter.cs" />
+    <Compile Include="Query\Filters\ResultBlobValueDataTypeNameFilter.cs" />
+    <Compile Include="Query\Filters\ResultBlobValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ResultBoolValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ResultFloatValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ResultIntValueValueFilter.cs" />
+    <Compile Include="Query\Filters\ResultNameFilter.cs" />
+    <Compile Include="Query\Filters\ResultStringValueValueFilter.cs" />
+    <Compile Include="Query\Filters\RunClientNameFilter.cs" />
+    <Compile Include="Query\Filters\RunCreatedDateFilter.cs" />
+    <Compile Include="Query\Filters\RunRandomSeedFilter.cs" />
+    <Compile Include="Query\Filters\RunUserNameFilter.cs" />
     <Compile Include="Query\IFilter.cs" />
     <Compile Include="Query\IQueryService.cs" />
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmClassNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmClassNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmClassNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmClassNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Algorithm.AlgorithmClass.Name == Value;
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Algorithm.AlgorithmClass.Name != Value;
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Algorithm.AlgorithmClass.Name.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Algorithm.AlgorithmClass.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmClassNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmClassNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmDataDataTypeNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmDataDataTypeNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmDataDataTypeNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmDataDataTypeNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => (x.Experiment.Algorithm.AlgorithmData.DataType.Name == Value) || (x.Experiment.Algorithm.AlgorithmData.DataType.TypeName == Value);
+          case DataTransfer.StringComparison.NotEqual:
+            return x => (x.Experiment.Algorithm.AlgorithmData.DataType.Name != Value) && (x.Experiment.Algorithm.AlgorithmData.DataType.TypeName != Value);
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Algorithm.AlgorithmData.DataType.Name.Contains(Value) || x.Experiment.Algorithm.AlgorithmData.DataType.TypeName.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Algorithm.AlgorithmData.DataType.Name.Contains(Value) && !x.Experiment.Algorithm.AlgorithmData.DataType.TypeName.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmDataDataTypeNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmDataDataTypeNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Algorithm.Name == Value;
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Algorithm.Name != Value;
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Algorithm.Name.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Algorithm.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBlobValueDataTypeNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBlobValueDataTypeNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBlobValueDataTypeNameFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterBlobValueDataTypeNameFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && ((y.DataType.Name == Value) || (y.DataType.TypeName == Value)));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && ((y.DataType.Name != Value) && (!(y.DataType.TypeName != Value))));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.DataType.Name.Contains(Value) || y.DataType.TypeName.Contains(Value)));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (!y.DataType.Name.Contains(Value) && !y.DataType.TypeName.Contains(Value)));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterBlobValueDataTypeNameFilter(string name, DataTransfer.StringComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterBlobValueDataTypeNameFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBlobValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBlobValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBlobValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterBlobValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public byte[] Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterBlobValueValueFilter(string name, DataTransfer.EqualityComparison comparison, byte[] value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterBlobValueValueFilter(DataTransfer.NameEqualityComparisonByteArrayFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBoolValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBoolValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterBoolValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterBoolValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public bool Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterBoolValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterBoolValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterBoolValueValueFilter(string name, DataTransfer.EqualityComparison comparison, bool value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterBoolValueValueFilter(DataTransfer.NameEqualityComparisonBoolFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterFloatValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterFloatValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterFloatValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterFloatValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public double Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterFloatValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, double value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterFloatValueValueFilter(DataTransfer.NameOrdinalComparisonDoubleFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterIntValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterIntValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterIntValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterIntValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterIntValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, long value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterIntValueValueFilter(DataTransfer.NameOrdinalComparisonLongFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterNameFilter.cs	(revision 5480)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.Any(y => (y.Name == Value) || (y.Alias == Value));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.All(y => (y.Name != Value) && (y.Alias != Value));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.Any(y => y.Name.Contains(Value) || y.Alias.Contains(Value));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.All(y => !y.Name.Contains(Value) && !y.Alias.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterStringValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterStringValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmParameterStringValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterStringValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && y.Value.Contains(Value));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && !y.Value.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterStringValueValueFilter(string name, DataTransfer.StringComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterStringValueValueFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmPlatformNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmPlatformNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AlgorithmPlatformNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmPlatformNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Algorithm.Platform.Name == Value;
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Algorithm.Platform.Name != Value;
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Algorithm.Platform.Name.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Algorithm.Platform.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmPlatformNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmPlatformNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AndFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AndFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/AndFilter.cs	(revision 5480)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AndFilter : IFilter {
+    public List<IFilter> Filters { get; private set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        ParameterExpression parameter = System.Linq.Expressions.Expression.Parameter(typeof(Run));
+        Expression expr = System.Linq.Expressions.Expression.Constant(true);
+        foreach (IFilter filter in Filters)
+          expr = System.Linq.Expressions.Expression.AndAlso(expr, System.Linq.Expressions.Expression.Invoke(filter.Expression, parameter));
+        return System.Linq.Expressions.Expression.Lambda<Func<Run, bool>>(expr, parameter);
+      }
+    }
+
+    public AndFilter(IEnumerable<IFilter> filters) {
+      Filters = new List<IFilter>(filters);
+    }
+    public AndFilter(DataTransfer.CombinedFilter filter) {
+      Filters = new List<IFilter>(filter.Filters.Select(x => (IFilter)Activator.CreateInstance(Type.GetType(x.FilterTypeName), x)));
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/OrFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/OrFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/OrFilter.cs	(revision 5480)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class OrFilter : IFilter {
+    public List<IFilter> Filters { get; private set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        ParameterExpression parameter = System.Linq.Expressions.Expression.Parameter(typeof(Run));
+        Expression expr = System.Linq.Expressions.Expression.Constant(false);
+        foreach (IFilter filter in Filters)
+          expr = System.Linq.Expressions.Expression.OrElse(expr, System.Linq.Expressions.Expression.Invoke(filter.Expression, parameter));
+        return System.Linq.Expressions.Expression.Lambda<Func<Run, bool>>(expr, parameter);
+      }
+    }
+
+    public OrFilter(IEnumerable<IFilter> filters) {
+      Filters = new List<IFilter>(filters);
+    }
+    public OrFilter(DataTransfer.CombinedFilter filter) {
+      Filters = new List<IFilter>(filter.Filters.Select(x => (IFilter)Activator.CreateInstance(Type.GetType(x.FilterTypeName), x)));
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemClassNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemClassNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemClassNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemClassNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Problem.ProblemClass.Name == Value;
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Problem.ProblemClass.Name != Value;
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Problem.ProblemClass.Name.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Problem.ProblemClass.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemClassNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemClassNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemDataDataTypeNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemDataDataTypeNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemDataDataTypeNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemDataDataTypeNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => (x.Experiment.Problem.ProblemData.DataType.Name == Value) || (x.Experiment.Problem.ProblemData.DataType.TypeName == Value);
+          case DataTransfer.StringComparison.NotEqual:
+            return x => (x.Experiment.Problem.ProblemData.DataType.Name != Value) && (x.Experiment.Problem.ProblemData.DataType.TypeName != Value);
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Problem.ProblemData.DataType.Name.Contains(Value) || x.Experiment.Problem.ProblemData.DataType.TypeName.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Problem.ProblemData.DataType.Name.Contains(Value) && !x.Experiment.Problem.ProblemData.DataType.TypeName.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemDataDataTypeNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemDataDataTypeNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Problem.Name == Value;
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Problem.Name != Value;
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Problem.Name.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Problem.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBlobValueDataTypeNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBlobValueDataTypeNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBlobValueDataTypeNameFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterBlobValueDataTypeNameFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && ((y.DataType.Name == Value) || (y.DataType.TypeName == Value)));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && ((y.DataType.Name != Value) && (!(y.DataType.TypeName != Value))));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.DataType.Name.Contains(Value) || y.DataType.TypeName.Contains(Value)));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (!y.DataType.Name.Contains(Value) && !y.DataType.TypeName.Contains(Value)));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterBlobValueDataTypeNameFilter(string name, DataTransfer.StringComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterBlobValueDataTypeNameFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBlobValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBlobValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBlobValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterBlobValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public byte[] Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterBlobValueValueFilter(string name, DataTransfer.EqualityComparison comparison, byte[] value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterBlobValueValueFilter(DataTransfer.NameEqualityComparisonByteArrayFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBoolValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBoolValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterBoolValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterBoolValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public bool Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.ProblemParameterBoolValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterBoolValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterBoolValueValueFilter(string name, DataTransfer.EqualityComparison comparison, bool value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterBoolValueValueFilter(DataTransfer.NameEqualityComparisonBoolFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterFloatValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterFloatValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterFloatValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterFloatValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public double Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterFloatValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, double value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterFloatValueValueFilter(DataTransfer.NameOrdinalComparisonDoubleFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterIntValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterIntValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterIntValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterIntValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterIntValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, long value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterIntValueValueFilter(DataTransfer.NameOrdinalComparisonLongFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterNameFilter.cs	(revision 5480)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Problem.ProblemParameters.Any(y => (y.Name == Value) || (y.Alias == Value));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Problem.ProblemParameters.All(y => (y.Name != Value) && (y.Alias != Value));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Problem.ProblemParameters.Any(y => y.Name.Contains(Value) || y.Alias.Contains(Value));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.Experiment.Problem.ProblemParameters.All(y => !y.Name.Contains(Value) && !y.Alias.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterStringValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterStringValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemParameterStringValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterStringValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && y.Value.Contains(Value));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && !y.Value.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterStringValueValueFilter(string name, DataTransfer.StringComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterStringValueValueFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemPlatformNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemPlatformNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ProblemPlatformNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemPlatformNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Problem.Platform.Name == Value;
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Problem.Platform.Name != Value;
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Problem.Platform.Name.Contains(Value);
+          case DataTransfer.StringComparison.NotContains:
+            return x => !x.Experiment.Problem.Platform.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemPlatformNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemPlatformNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBlobValueDataTypeNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBlobValueDataTypeNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBlobValueDataTypeNameFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultBlobValueDataTypeNameFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && ((y.DataType.Name == Value) || (y.DataType.TypeName == Value)));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && ((y.DataType.Name != Value) && (!(y.DataType.TypeName != Value))));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.DataType.Name.Contains(Value) || y.DataType.TypeName.Contains(Value)));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (!y.DataType.Name.Contains(Value) && !y.DataType.TypeName.Contains(Value)));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultBlobValueDataTypeNameFilter(string name, DataTransfer.StringComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultBlobValueDataTypeNameFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBlobValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBlobValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBlobValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultBlobValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public byte[] Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultBlobValueValueFilter(string name, DataTransfer.EqualityComparison comparison, byte[] value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultBlobValueValueFilter(DataTransfer.NameEqualityComparisonByteArrayFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBoolValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBoolValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultBoolValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultBoolValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public bool Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.ResultBoolValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.ResultBoolValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultBoolValueValueFilter(string name, DataTransfer.EqualityComparison comparison, bool value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultBoolValueValueFilter(DataTransfer.NameEqualityComparisonBoolFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultFloatValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultFloatValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultFloatValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultFloatValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public double Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultFloatValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, double value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultFloatValueValueFilter(DataTransfer.NameOrdinalComparisonDoubleFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultIntValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultIntValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultIntValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultIntValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultIntValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, long value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultIntValueValueFilter(DataTransfer.NameOrdinalComparisonLongFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultNameFilter.cs	(revision 5480)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.Experiment.Algorithm.Results.Any(y => (y.Name == Value) || (y.Alias == Value));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.Experiment.Algorithm.Results.All(y => (y.Name != Value) && (y.Alias != Value));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.Experiment.Algorithm.Results.Any(y => y.Name.Contains(Value) || y.Alias.Contains(Value));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.Experiment.Algorithm.Results.All(y => !y.Name.Contains(Value) && !y.Alias.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultStringValueValueFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultStringValueValueFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/ResultStringValueValueFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultStringValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.StringComparison.NotEqual:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          case DataTransfer.StringComparison.Contains:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && y.Value.Contains(Value));
+          case DataTransfer.StringComparison.NotContains:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && !y.Value.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultStringValueValueFilter(string name, DataTransfer.StringComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultStringValueValueFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunClientNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunClientNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunClientNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunClientNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            throw new NotSupportedException();
+          case DataTransfer.StringComparison.NotEqual:
+            throw new NotSupportedException();
+          case DataTransfer.StringComparison.Contains:
+            throw new NotSupportedException();
+          case DataTransfer.StringComparison.NotContains:
+            throw new NotSupportedException();
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunClientNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunClientNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunCreatedDateFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunCreatedDateFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunCreatedDateFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunCreatedDateFilter : IFilter {
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public DateTime Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.CreatedDate < Value;
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.CreatedDate <= Value;
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.CreatedDate == Value;
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.CreatedDate >= Value;
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.CreatedDate > Value;
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.CreatedDate != Value;
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunCreatedDateFilter(DataTransfer.OrdinalComparison comparison, DateTime value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunCreatedDateFilter(DataTransfer.OrdinalComparisonDateTimeFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunRandomSeedFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunRandomSeedFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunRandomSeedFilter.cs	(revision 5480)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunRandomSeedFilter : IFilter {
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.RandomSeed < Value;
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.RandomSeed <= Value;
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.RandomSeed == Value;
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.RandomSeed >= Value;
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.RandomSeed > Value;
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.RandomSeed != Value;
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunRandomSeedFilter(DataTransfer.OrdinalComparison comparison, long value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunRandomSeedFilter(DataTransfer.OrdinalComparisonLongFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunUserNameFilter.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunUserNameFilter.cs	(revision 5480)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Filters/RunUserNameFilter.cs	(revision 5480)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunUserNameFilter : IFilter {
+    public DataTransfer.StringComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.StringComparison.Equal:
+            throw new NotSupportedException();
+          case DataTransfer.StringComparison.NotEqual:
+            throw new NotSupportedException();
+          case DataTransfer.StringComparison.Contains:
+            throw new NotSupportedException();
+          case DataTransfer.StringComparison.NotContains:
+            throw new NotSupportedException();
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunUserNameFilter(DataTransfer.StringComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunUserNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
