Core Concepts > Filter Expressions
Filter Expressions
Filter expressions are the composition of one or more logical expressions to limit the data affected/returned during execution of a query. Filter expressions can be used with WHERE clauses, ON conditions of a JOIN clause, and HAVING clauses. The following examples demonstrate queries for each of the different clause types.
Filter expressions in Where clauses
The following filter specifies a field expression to be equal to the literal value of 1:
DateTimeOffset registration = db.SelectOne(dbo.Person.RegistrationDate)
.From(dbo.Person)
//int field expression comparison to int literal value
.Where(dbo.Person.Id == 1)
.Execute();
This filter specifies a field expression greater than a literal value:
var yesterday = DateTime.Now.Date.AddDays(-1);
IEnumerable<Person> people = db.SelectMany<Person>()
.From(dbo.Person)
//DateTime field expression comparison to DateTime literal value
.Where(dbo.Person.LastLoginDate > yesterday)
.Execute();
This filter specifies a field expression equal to a literal value:
IEnumerable<Person> people = db.SelectMany<Person>()
.From(dbo.Person)
//string field expression comparison to string literal value
.Where(dbo.Person.LastName == "Cartman")
.Execute();
This filter specifies a field expression equal to a field expression (all people with the same first name as their last name):
IEnumerable<Person> people = db.SelectMany<Person>()
.From(dbo.Person)
//string field expression comparison to string field expression
.Where(dbo.Person.FirstName == dbo.Person.LastName)
.Execute();
This filter specifies a field expression greater than a literal value and additionally a field expression greater than or equal to a literal value:
IEnumerable<Person> people = db.SelectMany<Person>()
.From(dbo.Person)
//logical And
.Where(
dbo.Person.YearOfLastCreditLimitReview > DateTime.Now.AddYears(-1).Year
&
dbo.Person.CreditLimit >= 25000
)
.Execute();
This filter specifies a field expression that is one of a set of literal values:
IEnumerable<Person> people = db.SelectMany<Person>()
.From(dbo.Person)
//logical Or
.Where(
dbo.Person.LastName == "Broflovski"
|
dbo.Person.LastName == "Cartman"
|
dbo.Person.LastName == "McCormick"
)
.Execute();
Filter expressions in Join clauses
IEnumerable<dynamic> person_totals = db.SelectMany(
dbo.Person.Id,
db.fx.Sum(dbo.Purchase.TotalPurchaseAmount).As("LifetimeValue")
)
.From(dbo.Person)
//int field expression comparison to int field expression
.InnerJoin(dbo.Purchase).On(dbo.Person.Id == dbo.Purchase.PersonId)
.GroupBy(dbo.Person.Id)
.Execute();
IEnumerable<dynamic> person_zips = db.SelectMany(
dbo.Person.Id,
dbo.Address.Zip
)
.From(dbo.Person)
//int field expression comparison to int field expression
.InnerJoin(dbo.PersonAddress).On(dbo.Person.Id == dbo.PersonAddress.PersonId)
//int field expression comparison to int field expression AND enum field expression comparison to literal enum value
.InnerJoin(dbo.Address).On(
dbo.PersonAddress.AddressId == dbo.Address.Id
&
dbo.Address.AddressType == AddressType.Mailing
)
.Execute();
Filter expressions in Having clauses
IEnumerable<dynamic> people = db.SelectMany(
dbo.Person.LastName,
db.fx.Count(dbo.Person.Id).As("LastNameCount")
)
.From(dbo.Person)
.GroupBy(dbo.Person.LastName)
//aggregate function comparison to int literal value
.Having(
db.fx.Count(dbo.Person.Id) > 1
)
.Execute();
Filter expressions using arithmetic
Filter expressions can also be composed using arithmetic expressions in WHERE clauses, JOIN clauses, and HAVING clauses.
Arithmetic expression in a WHERE clause:
IEnumerable<Product> products = db.SelectMany<Product>()
.From(dbo.Product)
.Where(
((dbo.Product.Quantity * dbo.Product.ListPrice) - (dbo.Product.Quantity * dbo.Product.Price)) > 1000
)
.Execute();
Arithmetic expression in a JOIN clause:
IEnumerable<dynamic> purchases = db.SelectMany(
dbo.Purchase.OrderNumber,
dbo.PurchaseLine.PurchasePrice,
dbo.PurchaseLine.Quantity
)
.From(dbo.PurchaseLine)
.InnerJoin(dbo.Purchase).On(dbo.PurchaseLine.PurchaseId == dbo.Purchase.Id & dbo.Purchase.TotalPurchaseAmount > 100)
.Execute();
And an arithmetic expression in a HAVING clause:
IEnumerable<dynamic> purchases = db.SelectMany(
dbo.Purchase.OrderNumber,
db.fx.Sum(dbo.PurchaseLine.PurchasePrice)
)
.From(dbo.PurchaseLine)
.InnerJoin(dbo.Purchase).On(dbo.PurchaseLine.PurchaseId == dbo.Purchase.Id)
.GroupBy(dbo.Purchase.OrderNumber)
.Having(db.fx.Sum(dbo.PurchaseLine.PurchasePrice) > 100)
.Execute();