Get List Example
Overview
This document demonstrates the complete Get List flow using the GetProductsForLookup feature from the EBusiness application. The flow starts with a GET request to the controller and uses Query projects instead of Handlers in the DomainHandler section for data retrieval. This is similar to Get Paged List but returns a simple IEnumerable<T> without pagination.
Complete Flow Architecture
GET Request → Controller → Service → Query Handler → Database → ResponseDetailed Flow Breakdown
1. GET Request
↓
2. Controller (API Entry Point)
↓
3. Service Layer (Business Orchestration)
↓
4. Query Handler (Data Retrieval)
↓
5. Database (Data Query)
↓
6. AutoMapper (Data Transformation)
↓
7. Response (Simple List)Step-by-Step Implementation
1. API Controller - The Entry Point
File: ProductsController_GetProductsForLookup.cs
What Happens:
HTTP Method:
GET /api/Products/GetProductsForLookupInput:
GetProductsForLookupParamsfrom query parametersAction: Calls the service layer to process the query
Response: HTTP 200 OK with
IEnumerable<GetProductsForLookupDto>
2. Service Layer - Business Orchestration
File: ProcessProductsService_GetProductsForLookup.cs
What Happens:
Query Resolution: Gets the FlexiQuery instance for GetProductsForLookup
Parameter Assignment: Assigns query parameters to the query handler
Query Execution: Calls the Fetch() method to execute the query
Result: Returns simple list of products for lookup
3. Query Handler - Data Retrieval
File: GetProductsForLookup.cs
What Happens:
Parameter Assignment: Stores query parameters for use in query building
Query Building: Creates the database query with filtering
Data Projection: Uses AutoMapper to project to DTOs
Result Building: Creates the simple list output
4. Query Parameters - Input DTO
File: GetProductsForLookupParams.cs
What Happens:
Custom Filters: Allows filtering by search term, category, active status
Limit Support: Optional limit for lookup results
Query Parameters: Automatically bound from URL query string
5. Output DTO - Data Transfer Object
File: GetProductsForLookupDto.cs
What Happens:
Lookup Data: Contains essential fields for dropdown/lookup scenarios
Minimal Structure: Only includes necessary fields for selection
Performance: Lightweight DTO for fast loading
6. AutoMapper Configuration - Data Transformation
File: GetProductsForLookupMapperConfiguration.cs
What Happens:
Entity to DTO Mapping: Maps domain entities to DTOs
Custom Mappings: Handles complex property transformations
Lookup Optimization: Maps only necessary fields for lookup scenarios
Key Differences from Get Paged List
Get List vs Get Paged List Characteristics
Return Type
IEnumerable<T>
FlexiPagedList<T>
Pagination
❌ No pagination
✅ Built-in pagination
Use Case
Lookup/Dropdown
Data grids/tables
Performance
Fast for small datasets
Optimized for large datasets
Memory Usage
Lower (no pagination metadata)
Higher (includes pagination info)
Controller Method
RunQueryListService
RunQueryPagedService
Query Base
FlexiQueryEnumerableBridge
FlexiQueryPagedListBridge
Get List-Specific Features
Simple List: Returns basic
IEnumerable<T>without paginationLookup Optimized: Designed for dropdown/lookup scenarios
Lightweight: Minimal data transfer for performance
No Pagination: All results returned in single response
Fast Loading: Optimized for quick data retrieval
Common Use Cases
Dropdown Lists: Populate dropdown controls
Lookup Tables: Search and select scenarios
Reference Data: Load reference data for forms
Auto-complete: Provide suggestions for input fields
Quick Filters: Fast filtering options
Flow Summary
Synchronous Flow (Data Retrieval)
GET Request → Controller receives request with query parameters
Service Processing → Business orchestration and query resolution
Query Handler → Database query building and execution
AutoMapper → Entity-to-DTO transformation
Response → HTTP 200 OK with simple list
No Asynchronous Flow
No Events: Query operations don't publish events
No Subscribers: No side effects or event processing
Immediate Response: Data is returned immediately
Query Building Patterns
Basic Query Building
Advanced Query Building
Performance Considerations
Optimization Strategies
Limit Results: Always apply reasonable limits for lookup scenarios
Selective Fields: Only return necessary fields in DTO
Indexing: Ensure proper database indexes on filter fields
Caching: Consider caching for frequently accessed lookup data
Lazy Loading: Use lazy loading for related entities when appropriate
When to Use Get List vs Get Paged List
Dropdown Population
✅ Yes
❌ No
Lookup Tables
✅ Yes
❌ No
Auto-complete
✅ Yes
❌ No
Data Grids
❌ No
✅ Yes
Large Datasets
❌ No
✅ Yes
Admin Interfaces
❌ No
✅ Yes
Reporting
❌ No
✅ Yes
Key Benefits
Performance: Fast loading for small datasets
Simplicity: Simple list without pagination complexity
Lookup Optimized: Perfect for dropdown/lookup scenarios
Lightweight: Minimal data transfer
Type Safety: Strongly typed DTOs and parameters
AutoMapper: Automatic entity-to-DTO mapping
No Side Effects: Read-only operations
Testable: Each component can be tested independently
Maintainable: Clear separation of concerns
This GetProductsForLookup example demonstrates how FlexBase enables clean, maintainable, and scalable list operations optimized for lookup and dropdown scenarios! 🚀
Last updated