Real-world examples and common patterns for using SmartWhere effectively in your applications.
public class ProductSearchRequest : IWhereClause
{
// Basic search
[WhereClause]
public string? Name { get; set; }
[WhereClause("Category.Name")]
public string? Category { get; set; }
// Price range
[ComparativeWhereClause("Price", ComparisonOperator.GreaterThanOrEqual)]
public decimal? MinPrice { get; set; }
[ComparativeWhereClause("Price", ComparisonOperator.LessThanOrEqual)]
public decimal? MaxPrice { get; set; }
// Stock availability
[ComparativeWhereClause("StockQuantity", ComparisonOperator.GreaterThan)]
public int? MinStock { get; set; }
// Brand search
[TextualWhereClause("Brand.Name", StringMethod.Contains)]
public string? BrandName { get; set; }
// Rating filter
[ComparativeWhereClause("AverageRating", ComparisonOperator.GreaterThanOrEqual)]
public decimal? MinRating { get; set; }
}
public class OrderSearchRequest : IWhereClause
{
// Customer information
[WhereClause("Customer.Email")]
public string? CustomerEmail { get; set; }
[WhereClause("Customer.Name")]
public string? CustomerName { get; set; }
// Date range
[ComparativeWhereClause("OrderDate", ComparisonOperator.GreaterThanOrEqual)]
public DateTime? StartDate { get; set; }
[ComparativeWhereClause("OrderDate", ComparisonOperator.LessThanOrEqual)]
public DateTime? EndDate { get; set; }
// Order status
[WhereClause("Status")]
public string? OrderStatus { get; set; }
// Total amount
[ComparativeWhereClause("TotalAmount", ComparisonOperator.GreaterThan)]
public decimal? MinAmount { get; set; }
}
public class BookSearchRequest : IWhereClause
{
// Basic book information
[TextualWhereClause(StringMethod.Contains)]
public string? Title { get; set; }
[TextualWhereClause("Author.Name", StringMethod.StartsWith)]
public string? AuthorName { get; set; }
[WhereClause("ISBN")]
public string? ISBN { get; set; }
// Publication details
[ComparativeWhereClause("PublishedYear", ComparisonOperator.GreaterThanOrEqual)]
public int? StartYear { get; set; }
[ComparativeWhereClause("PublishedYear", ComparisonOperator.LessThanOrEqual)]
public int? EndYear { get; set; }
// Genre and category
[WhereClause("Genre.Name")]
public string? Genre { get; set; }
[WhereClause("Category.Name")]
public string? Category { get; set; }
// Availability
[WhereClause("IsAvailable")]
public bool? Available { get; set; }
}
public class MemberSearchRequest : IWhereClause
{
// Personal information
[TextualWhereClause(StringMethod.Contains)]
public string? Name { get; set; }
[WhereClause("Email")]
public string? Email { get; set; }
[WhereClause("PhoneNumber")]
public string? Phone { get; set; }
// Membership details
[WhereClause("MembershipType.Name")]
public string? MembershipType { get; set; }
[ComparativeWhereClause("JoinDate", ComparisonOperator.GreaterThanOrEqual)]
public DateTime? JoinedAfter { get; set; }
// Activity status
[WhereClause("IsActive")]
public bool? Active { get; set; }
}
public class PatientSearchRequest : IWhereClause
{
// Basic patient information
[TextualWhereClause(StringMethod.Contains)]
public string? FirstName { get; set; }
[TextualWhereClause(StringMethod.Contains)]
public string? LastName { get; set; }
[WhereClause("DateOfBirth")]
public DateTime? DateOfBirth { get; set; }
// Medical information
[WhereClause("BloodType")]
public string? BloodType { get; set; }
[WhereClause("PrimaryCarePhysician.Name")]
public string? DoctorName { get; set; }
// Insurance and billing
[WhereClause("InsuranceProvider.Name")]
public string? InsuranceProvider { get; set; }
[WhereClause("InsurancePolicyNumber")]
public string? PolicyNumber { get; set; }
// Contact information
[WhereClause("Address.City")]
public string? City { get; set; }
[WhereClause("Address.State")]
public string? State { get; set; }
}
public class AppointmentSearchRequest : IWhereClause
{
// Date and time
[ComparativeWhereClause("AppointmentDate", ComparisonOperator.GreaterThanOrEqual)]
public DateTime? StartDate { get; set; }
[ComparativeWhereClause("AppointmentDate", ComparisonOperator.LessThanOrEqual)]
public DateTime? EndDate { get; set; }
// Patient and doctor
[WhereClause("Patient.Name")]
public string? PatientName { get; set; }
[WhereClause("Doctor.Name")]
public string? DoctorName { get; set; }
// Appointment details
[WhereClause("AppointmentType.Name")]
public string? AppointmentType { get; set; }
[WhereClause("Status")]
public string? Status { get; set; }
// Location
[WhereClause("Location.Name")]
public string? Location { get; set; }
}
public class EmployeeSearchRequest : IWhereClause
{
// Basic information
[TextualWhereClause(StringMethod.Contains)]
public string? FirstName { get; set; }
[TextualWhereClause(StringMethod.Contains)]
public string? LastName { get; set; }
[WhereClause("EmployeeId")]
public string? EmployeeId { get; set; }
// Department and position
[WhereClause("Department.Name")]
public string? Department { get; set; }
[WhereClause("Position.Title")]
public string? Position { get; set; }
// Employment details
[ComparativeWhereClause("HireDate", ComparisonOperator.GreaterThanOrEqual)]
public DateTime? HiredAfter { get; set; }
[WhereClause("EmploymentStatus")]
public string? Status { get; set; }
// Salary information
[ComparativeWhereClause("Salary", ComparisonOperator.GreaterThanOrEqual)]
public decimal? MinSalary { get; set; }
[ComparativeWhereClause("Salary", ComparisonOperator.LessThanOrEqual)]
public decimal? MaxSalary { get; set; }
}
public class PerformanceReviewSearchRequest : IWhereClause
{
// Review period
[ComparativeWhereClause("ReviewDate", ComparisonOperator.GreaterThanOrEqual)]
public DateTime? StartDate { get; set; }
[ComparativeWhereClause("ReviewDate", ComparisonOperator.LessThanOrEqual)]
public DateTime? EndDate { get; set; }
// Employee information
[WhereClause("Employee.Name")]
public string? EmployeeName { get; set; }
[WhereClause("Reviewer.Name")]
public string? ReviewerName { get; set; }
// Performance metrics
[ComparativeWhereClause("OverallRating", ComparisonOperator.GreaterThanOrEqual)]
public decimal? MinRating { get; set; }
[WhereClause("ReviewType")]
public string? ReviewType { get; set; }
}
public class VehicleSearchRequest : IWhereClause
{
// Vehicle identification
[WhereClause("LicensePlate")]
public string? LicensePlate { get; set; }
[WhereClause("VIN")]
public string? VIN { get; set; }
// Vehicle details
[WhereClause("Make")]
public string? Make { get; set; }
[WhereClause("Model")]
public string? Model { get; set; }
[WhereClause("Year")]
public int? Year { get; set; }
// Operational status
[WhereClause("Status")]
public string? Status { get; set; }
[WhereClause("IsOperational")]
public bool? Operational { get; set; }
// Maintenance information
[ComparativeWhereClause("LastMaintenanceDate", ComparisonOperator.LessThan)]
public DateTime? MaintenanceDueBefore { get; set; }
[WhereClause("MaintenanceType.Name")]
public string? MaintenanceType { get; set; }
}
public class AccountSearchRequest : IWhereClause
{
// Account information
[WhereClause("AccountNumber")]
public string? AccountNumber { get; set; }
[WhereClause("AccountType.Name")]
public string? AccountType { get; set; }
// Customer information
[WhereClause("Customer.Name")]
public string? CustomerName { get; set; }
[WhereClause("Customer.SSN")]
public string? SSN { get; set; }
// Balance and limits
[ComparativeWhereClause("Balance", ComparisonOperator.GreaterThanOrEqual)]
public decimal? MinBalance { get; set; }
[ComparativeWhereClause("Balance", ComparisonOperator.LessThanOrEqual)]
public decimal? MaxBalance { get; set; }
// Account status
[WhereClause("Status")]
public string? Status { get; set; }
[WhereClause("IsActive")]
public bool? Active { get; set; }
}
// ✅ Use consistent naming
public class ConsistentSearchRequest : IWhereClause
{
[WhereClause("Title")]
public string BookTitle { get; set; }
[WhereClause("Author.Name")]
public string AuthorName { get; set; }
[WhereClause("Publisher.Name")]
public string PublisherName { get; set; }
}
// ✅ Group related properties
public class OrganizedSearchRequest : IWhereClause
{
// Basic search
[WhereClause]
public string Title { get; set; }
// Advanced search
[TextualWhereClause(StringMethod.Contains)]
public string Description { get; set; }
// Numeric filters
[ComparativeWhereClause("Price", ComparisonOperator.GreaterThan)]
public decimal? MinPrice { get; set; }
[ComparativeWhereClause("Price", ComparisonOperator.LessThan)]
public decimal? MaxPrice { get; set; }
}
// ✅ Use nullable types for optional filters
public class SafeSearchRequest : IWhereClause
{
[WhereClause]
public string? Title { get; set; } // Optional
[WhereClause]
public int? PublishedYear { get; set; } // Optional
[WhereClause]
public string? Genre { get; set; } // Optional
}
// ✅ Limit nested property depth
public class OptimizedSearchRequest : IWhereClause
{
// Shallow nesting (better performance)
[WhereClause("AuthorName")]
public string AuthorName { get; set; }
// Instead of deep nesting
// [WhereClause("Author.BirthCountry.Region.City.Name")]
}
public class DateRangeRequest : IWhereClause
{
[ComparativeWhereClause("Date", ComparisonOperator.GreaterThanOrEqual)]
public DateTime? StartDate { get; set; }
[ComparativeWhereClause("Date", ComparisonOperator.LessThanOrEqual)]
public DateTime? EndDate { get; set; }
}
public class PriceRangeRequest : IWhereClause
{
[ComparativeWhereClause("Price", ComparisonOperator.GreaterThanOrEqual)]
public decimal? MinPrice { get; set; }
[ComparativeWhereClause("Price", ComparisonOperator.LessThanOrEqual)]
public decimal? MaxPrice { get; set; }
}
public class TextSearchRequest : IWhereClause
{
[TextualWhereClause(StringMethod.Contains)]
public string? Title { get; set; }
[TextualWhereClause(StringMethod.StartsWith)]
public string? Author { get; set; }
[TextualWhereClause(StringMethod.EndsWith)]
public string? ISBN { get; set; }
}
public class StatusFilterRequest : IWhereClause
{
[WhereClause("Status")]
public string? Status { get; set; }
[WhereClause("IsActive")]
public bool? Active { get; set; }
[WhereClause("IsDeleted")]
public bool? Deleted { get; set; }
}
Last Updated: 2025-01-16
Version: 2.2.3