mirror of https://github.com/sean-m/McRule.git
Basic Dictionary string values can be pulled but ContainsKey checks aren't performed.
parent
a4a2b12db4
commit
e6389cab1d
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
|
@ -62,13 +63,15 @@ namespace McRule.Tests {
|
|||
}
|
||||
|
||||
|
||||
[Test] public void CanSelectDictionaryValuesByKey() {
|
||||
[Test]
|
||||
public void CanSelectDictionaryValuesByKey() {
|
||||
var lambda = itPeople.GetPredicateExpression<ContextStringDictionary>();
|
||||
Console.WriteLine(lambda);
|
||||
|
||||
var filter = lambda.Compile();
|
||||
Func<ContextStringDictionary, bool> filterText = x => (x.ContainsKey("Department") && (x["Department"] != null) && x["Department"].Equals("IT"));
|
||||
var filteredContexts = SomeContexts.Select(x => x.Context).Where(filterText)?.ToList();
|
||||
var filteredContexts = SomeContexts.Select(x => x.Context)
|
||||
.Where(x => x.ContainsKey("Department")) // Skip entry with a missing key
|
||||
.Where(filter)?.ToList();
|
||||
|
||||
Assert.NotNull(filteredContexts);
|
||||
Assert.AreEqual(filteredContexts.Count, 2);
|
||||
|
|
|
@ -402,20 +402,20 @@ public abstract class ExpressionGeneratorBase : ExpressionGenerator {
|
|||
|
||||
if (value.StartsWith("*") && value.EndsWith("*"))
|
||||
{
|
||||
comparison = PredicateBuilder.And<T>((Expression<Func<T, bool>>)comparison, AddStringPropertyExpression<T>(strParam, value.Trim('*'), "Contains", ignoreCase));
|
||||
comparison = AddStringPropertyExpression<T>(strParam, value.Trim('*'), "Contains", ignoreCase);
|
||||
}
|
||||
else if (value.StartsWith("*"))
|
||||
{
|
||||
comparison = PredicateBuilder.And<T>((Expression<Func<T, bool>>)comparison, AddStringPropertyExpression<T>(strParam, value.TrimStart('*'), "EndsWith", ignoreCase));
|
||||
comparison = AddStringPropertyExpression<T>(strParam, value.TrimStart('*'), "EndsWith", ignoreCase);
|
||||
|
||||
}
|
||||
else if (value.EndsWith("*"))
|
||||
{
|
||||
comparison = PredicateBuilder.And<T>((Expression<Func<T, bool>>)comparison, AddStringPropertyExpression<T>(strParam, value.TrimEnd('*'), "StartsWith", ignoreCase));
|
||||
comparison = AddStringPropertyExpression<T>(strParam, value.TrimEnd('*'), "StartsWith", ignoreCase);
|
||||
}
|
||||
else
|
||||
{
|
||||
comparison = PredicateBuilder.And<T>((Expression<Func<T, bool>>)comparison, AddStringPropertyExpression<T>(strParam, value, "Equals", ignoreCase));
|
||||
comparison = AddStringPropertyExpression<T>(strParam, value, "Equals", ignoreCase);
|
||||
}
|
||||
|
||||
if (negateResult)
|
||||
|
|
Loading…
Reference in New Issue