Skip to content
This repository was archived by the owner on Apr 15, 2025. It is now read-only.

Commit f9f8aad

Browse files
committed
Adding GroupBy<TJoined>() and Having<TJoined>().
1 parent 45156b8 commit f9f8aad

File tree

4 files changed

+58
-0
lines changed

4 files changed

+58
-0
lines changed

‎DataCore.Test/QueryTestGroupBy.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,18 @@ public void CanAggregateGroupBy()
3636

3737
Assert.AreEqual("TestClass.Id, TestClass.FloatNumber, TestClass.Name", query.SqlGroupBy);
3838
}
39+
40+
[Test]
41+
public void CanAggregateGroupByOther()
42+
{
43+
var query = new Query<TestClass>(new Translator());
44+
query.Join<TestClass2>((t, t2) => t.TestClass2Id == t2.Id);
45+
46+
query.GroupBy(t => t.Id);
47+
query.GroupBy(t => new { Number = t.FloatNumber, t.Name });
48+
query.GroupBy<TestClass2>(t2 => t2.Id);
49+
50+
Assert.AreEqual("TestClass.Id, TestClass.FloatNumber, TestClass.Name, TestClass2.Id", query.SqlGroupBy);
51+
}
3952
}
4053
}

‎DataCore.Test/QueryTestHaving.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,24 @@ public void CanGenerateHavingWithManyArgumentsAggregated()
3434
Assert.AreEqual(0, query.Parameters.GetValues()["@p0"]);
3535
Assert.AreEqual("test", query.Parameters.GetValues()["@p1"]);
3636
}
37+
38+
[Test]
39+
public void CanGenerateHavingWithJoinedTable()
40+
{
41+
var query = new Query<TestClass>(new Translator()).Having<TestClass2>(t => t.Id > 0);
42+
43+
Assert.AreEqual("(TestClass2.Id > @p0)", query.SqlHaving);
44+
Assert.AreEqual(0, query.Parameters.GetValues()["@p0"]);
45+
}
46+
47+
[Test]
48+
public void CanGenerateHavingWithJoinedTableAndManyArgumentsAggregated()
49+
{
50+
var query = new Query<TestClass>(new Translator()).Having<TestClass2>(t => t.Id > 0).Having(t => t.Name == "test");
51+
52+
Assert.AreEqual("((TestClass2.Id > @p0)) AND ((TestClass.Name = @p1))", query.SqlHaving);
53+
Assert.AreEqual(0, query.Parameters.GetValues()["@p0"]);
54+
Assert.AreEqual("test", query.Parameters.GetValues()["@p1"]);
55+
}
3756
}
3857
}

‎DataCore/Query.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,22 @@ public Query<T> Having(Expression<Func<T, bool>> clause)
350350
return this;
351351
}
352352

353+
public Query<T> Having<TJoined>(Expression<Func<TJoined, bool>> clause)
354+
{
355+
var query = GetQueryFromClause(clause);
356+
357+
SqlHaving = string.IsNullOrEmpty(SqlHaving) ? query : string.Concat("(", SqlHaving, ") AND (", query, ")");
358+
359+
return this;
360+
}
361+
362+
public Query<T> GroupBy<TJoined>(Expression<Func<TJoined, dynamic>> clause)
363+
{
364+
SqlGroupBy = ExpressionHelper.FormatStringFromArguments(_translator, clause, SqlGroupBy, Parameters);
365+
366+
return this;
367+
}
368+
353369
public Query<T> GroupBy(Expression<Func<T, dynamic>> clause)
354370
{
355371
SqlGroupBy = ExpressionHelper.FormatStringFromArguments(_translator, clause, SqlGroupBy, Parameters);

‎README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@ var result = db.Select(query);
112112
var query = db.From<User>().GroupBy(u => u.Name).Having(u => u.Age.Sum() > 100).Count();
113113
var result = db.Select(query);
114114
```
115+
```csharp
116+
var query = db.From<User>()
117+
.LeftJoin<Address>((u, a) => u.Id == a.UserId)
118+
.GroupBy(u => u.Name)
119+
.GroupBy<Address>(a => a.Street)
120+
.Having(u => u.Age.Sum() > 100)
121+
.Having<Address>(a => a.Sum.Number.Count() > 2)
122+
.Count();
123+
var result = db.Select(query);
124+
```
115125

116126
### Select Columns
117127

0 commit comments

Comments
 (0)