SmartWhere

💡 Examples and Scenarios

Real-world examples and common patterns for using SmartWhere effectively in your applications.

🏪 E-Commerce Application

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; }
}

📚 Library Management System

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; }
}

🏥 Healthcare Management

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; }
}

🏢 Human Resources

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; }
}

🚗 Fleet Management

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; }
}

🏦 Banking System

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; }
}

🔧 Best Practices

1. Consistent Naming Conventions

// ✅ 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; }
}

2. Logical Grouping

// ✅ 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; }
}

3. Nullable Properties

// ✅ 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
}

4. Performance Optimization

// ✅ 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")]
}

🚨 Common Patterns

1. Date Range Queries

public class DateRangeRequest : IWhereClause
{
    [ComparativeWhereClause("Date", ComparisonOperator.GreaterThanOrEqual)]
    public DateTime? StartDate { get; set; }

    [ComparativeWhereClause("Date", ComparisonOperator.LessThanOrEqual)]
    public DateTime? EndDate { get; set; }
}

2. Price Range Queries

public class PriceRangeRequest : IWhereClause
{
    [ComparativeWhereClause("Price", ComparisonOperator.GreaterThanOrEqual)]
    public decimal? MinPrice { get; set; }

    [ComparativeWhereClause("Price", ComparisonOperator.LessThanOrEqual)]
    public decimal? MaxPrice { get; set; }
}

3. Text Search with Multiple Methods

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; }
}

4. Status and Boolean Filters

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