Query API
Query API
Basic Select
Query
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.Load();
Yields
SELECT * FROM [AggregateTest]
Default Conjunction
By default "AND" is used, but that can be overridden.
Query
EmployeesCollection emps = new EmployeesCollection();
emps.Query.Where(emps.Query.LastName.Like("A%"),
emps.Query.FirstName.Like("A%"));
emps.Query.Load();
Yields
SELECT * FROM [Employees]
WHERE ([LastName] LIKE @LastName1 AND [FirstName] LIKE @FirstName2)
Yields
SELECT * FROM [Employees]
WHERE ([LastName] LIKE @LastName1 OR [FirstName] LIKE @FirstName2)
Count
Query
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.Select
(
aggTestColl.Query.Salary.Count("Count")
);
aggTestColl.Query.Load();
Yields
SELECT COUNT([Salary]) AS 'Count' FROM [AggregateTest]
Query
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.es.CountAll = true;
aggTestColl.Query.es.CountAllAlias = "Total";
aggTestColl.Query.Load();
Yields
SELECT COUNT(*) AS 'Total' FROM [AggregateTest]
Aggregates
Avg, Count, Min, Max, Sum, StdDev, and Var) all share the same syntax.
Yields
SELECT SUM([Salary]) AS 'Salary' FROM [AggregateTest]
Yields
SELECT AVG([Salary]) AS 'Avg' FROM [AggregateTest]
Query - Two Aggregates
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.Select
(
aggTestColl.Query.Salary.Sum("Sum"),
aggTestColl.Query.Salary.Min("Min")
);
aggTestColl.Query.Load();
Yields
SELECT SUM([Salary]) AS 'Sum',MIN([Salary]) AS 'Min'
FROM [AggregateTest]
Yields
SELECT COUNT(DISTINCT [LastName]) AS 'Count'
FROM [AggregateTest]
Yields
SELECT SUM([Salary]) AS 'Sum' ,COUNT(*) AS 'Total'
FROM [AggregateTest]
Query - Aggregate with Where clause
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.es.CountAll = true;
aggTestColl.Query.es.CountAllAlias = "Total";
aggTestColl.Query.Where
(
aggTestColl.Query.IsActive.Equal("true")
);
aggTestColl.Query.Load();
Yields
SELECT COUNT(*) AS 'Total'
FROM [AggregateTest]
WHERE ([IsActive] = @IsActive1)
Group By
Query
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.es.CountAll = true;
aggTestColl.Query.es.CountAllAlias = "Count";
aggTestColl.Query
.Select (aggTestColl.Query.IsActive)
.GroupBy(aggTestColl.Query.IsActive);
aggTestColl.Query.Load();
Yields
SELECT [IsActive] ,COUNT(*) AS 'Count'
FROM [AggregateTest]
GROUP BY [IsActive]
Yields
SELECT [IsActive],[DepartmentID] ,COUNT(*) AS 'Count'
FROM [AggregateTest]
WHERE ([IsActive] = @IsActive1 )
GROUP BY [IsActive],[DepartmentID]
Query - Select, Where, GroupBy, and OrderBy
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.es.CountAll = true;
aggTestColl.Query
.Select (aggTestColl.Query.IsActive,
aggTestColl.Query.DepartmentID)
.Where (aggTestColl.Query.IsActive.Equal(true))
.GroupBy(aggTestColl.Query.IsActive,
aggTestColl.Query.DepartmentID)
.OrderBy(aggTestColl.Query.DepartmentID.Ascending,
aggTestColl.Query.IsActive.Ascending);
aggTestColl.Query.Load();
Yields
SELECT [IsActive],[DepartmentID] ,COUNT(*) AS 'Count'
FROM [AggregateTest]
WHERE ([IsActive] = @IsActive1 )
GROUP BY [IsActive],[DepartmentID]
ORDER BY [DepartmentID] ASC,[IsActive] ASC
Yields
SELECT [IsActive],[DepartmentID] ,COUNT(*) AS 'Count'
FROM [AggregateTest]
WHERE ([IsActive] = @IsActive1 )
GROUP BY [IsActive],[DepartmentID] WITH ROLLUP
ORDER BY [DepartmentID] ASC,[IsActive] ASC
Operators in Queries
Query
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.Where(aggTestColl.Query.IsActive == true);
aggTestColl.Query.Load();
Yields
SELECT * FROM [AggregateTest] WHERE ([IsActive] = @IsActive1)
Query
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.Where(aggTestColl.Query.Salary >= 30.00);
aggTestColl.Query.Load();
Yields
SELECT * FROM [AggregateTest] WHERE ([Salary] >= @Salary1)
Yields
SELECT DISTINCT [LastName],[FirstName] FROM [AggregateTest]
Query – Top 5
AggregateTestCollection aggTestColl = new AggregateTestCollection();
aggTestColl.Query.OrderBy(aggTestColl.Query.Salary.Descending);
aggTestColl.Query.es.Top = 5;
aggTestColl.Query.Load();
Yields
SELECT TOP 5 * FROM [AggregateTest] ORDER BY [Salary] DESC
Mixing AND / OR in Queries
Query
EmployeesCollection emps = new EmployeesCollection();
emps.Query
.Select
(
emps.Query.EmployeeID,
emps.Query.FirstName,
emps.Query.LastName
)
.Where
(
emps.Query.Or
(
emps.Query.LastName.Like("%A%"),
emps.Query.LastName.Like("%O%")
),
emps.Query.BirthDate.Between("1/1/1940", "1/1/2006")
)
.OrderBy
(
emps.Query.LastName.Descending,
emps.Query.FirstName.Ascending
);
emps.Query.Load();
Yields
SELECT [EmployeeID],[FirstName],[LastName]
FROM [Employees]
WHERE (([LastName] LIKE @LastName1 OR [LastName] LIKE @LastName2)
AND [BirthDate] BETWEEN @BirthDate3 AND @BirthDate4)
ORDER BY [LastName] DESC,[FirstName] ASC
Simplifying Queries
Let's simplify the query above to something more readable. Of course, the queries below yield
the same sql so it's not re-listed.
Query - Better yet, add a method directly to your concrete query class.
public class EmployeesQuery : esEmployeesQuery
{
public bool CustomLoad()
{
Select(EmployeeID, FirstName, LastName, TitleOfCourtesy)
.Where
(
Or(LastName.Like("%A%"), LastName.Like("%O%")),
this.BirthDate.Between("1/1/1940", "1/1/2006")
)
.OrderBy(LastName.Descending, FirstName.Ascending);
return this.Load();
}
}