๐งน LINQ = Data Validation
Data needs validation. LINQ helps validate and clean data efficiently.
๐ Data Validation
// Validation Rules public class DataValidator{ private readonly List > _rules = new(); public DataValidator AddRule(Func rule) { _rules.Add(rule); return this; } public bool Validate(T item) { return _rules.All(rule => rule(item)); } public IEnumerable ValidateAll(IEnumerable data) { return data.Where(item => Validate(item)); } public IEnumerable GetErrors(IEnumerable data) { return data .Select(item => new { Item = item, Errors = _rules .Select((rule, index) => new { rule, index }) .Where(x => !x.rule(item)) .Select(x => x.index) .ToList() }) .Where(x => x.Errors.Any()) .Select(x => new ValidationError { Item = x.Item, ErrorIndices = x.Errors }); } }
๐ฏ Data Cleaning
// Data Cleaning Pipeline public class DataCleaner{ public IEnumerable Clean(IEnumerable data) { return data .Where(item => item != null) .Select(RemoveWhitespace) .Select(RemoveDuplicates) .Select(NormalizeData) .Where(IsValid); } private T RemoveWhitespace(T item) { // Remove whitespace from string properties return item; } private T RemoveDuplicates(T item) { // Remove duplicate data return item; } private T NormalizeData(T item) { // Normalize data formats return item; } private bool IsValid(T item) { // Validate final data return true; } } // Usage Example var users = GetUsers(); var validator = new DataValidator () .AddRule(u => !string.IsNullOrEmpty(u.Name)) .AddRule(u => u.Age >= 18) .AddRule(u => u.Email.Contains('@')); var validUsers = validator.ValidateAll(users); var errors = validator.GetErrors(users); var cleaner = new DataCleaner (); var cleanUsers = cleaner.Clean(validUsers);
๐ก Data Validation Tips
- Validate early in pipeline
- Use meaningful error messages
- Clean data consistently
- Log validation errors
- Test edge cases
LINQ makes data validation and cleaning elegant. It ensures data quality in your applications.
