Skip to content

Commit e45af1e

Browse files
committed
Adding SequenceEqual
1 parent 8ba466e commit e45af1e

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/DDDToolkit.Querying/QueryBuilderIEnumerableExtensions.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,23 @@ public static Query<T> WithNotAll<T, T1>(this QueryBuilderExpression<T, IEnumera
6969
var lambda = Expression.Lambda<Func<T, bool>>(Expression.Not(expression), queryBuilderExpression._expression.Parameters);
7070
return queryBuilderExpression._continueWith(new Query<T>(lambda));
7171
}
72+
73+
public static Query<T> EqualToSequence<T, T1>(this QueryBuilderExpression<T, IEnumerable<T1>> queryBuilderExpression, IEnumerable<T1> other)
74+
{
75+
var otherEntity = Expression.Constant(other, typeof(IEnumerable<T1>));
76+
var method = typeof(Enumerable).GetMethods().FirstOrDefault(m => m.Name == "SequenceEqual" && m.GetParameters().Length == 2)?.MakeGenericMethod(typeof(T1));
77+
var expression = Expression.Call(method, queryBuilderExpression._expression.Body, otherEntity);
78+
var lambda = Expression.Lambda<Func<T, bool>>(expression, queryBuilderExpression._expression.Parameters);
79+
return queryBuilderExpression._continueWith(new Query<T>(lambda));
80+
}
81+
82+
public static Query<T> NotEqualToSequence<T, T1>(this QueryBuilderExpression<T, IEnumerable<T1>> queryBuilderExpression, IEnumerable<T1> other)
83+
{
84+
var otherEntity = Expression.Constant(other, typeof(IEnumerable<T1>));
85+
var method = typeof(Enumerable).GetMethods().FirstOrDefault(m => m.Name == "SequenceEqual" && m.GetParameters().Length == 2)?.MakeGenericMethod(typeof(T1));
86+
var expression = Expression.Call(method, queryBuilderExpression._expression.Body, otherEntity);
87+
var lambda = Expression.Lambda<Func<T, bool>>(Expression.Not(expression), queryBuilderExpression._expression.Parameters);
88+
return queryBuilderExpression._continueWith(new Query<T>(lambda));
89+
}
7290
}
7391
}

tests/DDDToolkit.Querying.Tests/Query_EnumerableExtensionsShould.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,5 +109,33 @@ public void WithNotAllShouldCorrectlyReturnFalse()
109109
var query = Query<IEnumerable<int>>.Is.WithNotAll(i => i < 6 && i > 0);
110110
_testEnumerable.Satisfies(query).Should().BeFalse();
111111
}
112+
113+
[Fact]
114+
public void EqualToSequenceShouldCorrectlyReturnTrue()
115+
{
116+
var query = Query<IEnumerable<int>>.Is.EqualToSequence(new[] { 1, 2, 3, 4, 5 });
117+
_testEnumerable.Satisfies(query).Should().BeTrue();
118+
}
119+
120+
[Fact]
121+
public void EqualToSequenceShouldCorrectlyReturnFalse()
122+
{
123+
var query = Query<IEnumerable<int>>.Is.EqualToSequence(new[] { 1, 2, 4, 5 });
124+
_testEnumerable.Satisfies(query).Should().BeFalse();
125+
}
126+
127+
[Fact]
128+
public void NotEqualToSequenceShouldCorrectlyReturnTrue()
129+
{
130+
var query = Query<IEnumerable<int>>.Is.NotEqualToSequence(new[] { 1, 2, 3, 4, 5, 6 });
131+
_testEnumerable.Satisfies(query).Should().BeTrue();
132+
}
133+
134+
[Fact]
135+
public void NotEqualToSequenceShouldCorrectlyReturnFalse()
136+
{
137+
var query = Query<IEnumerable<int>>.Is.NotEqualToSequence(new[] { 1, 2, 3, 4, 5 });
138+
_testEnumerable.Satisfies(query).Should().BeFalse();
139+
}
112140
}
113141
}

0 commit comments

Comments
 (0)