如何进阶C#搜索与筛选功能?求示例及C#进阶学习资源
C#搜索与筛选功能优化示例
下面是一个遵循常见优化思路的示例,核心围绕减少不必要计算、利用延迟执行、复用查询逻辑展开:
假设我们有一个Product实体类:
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public string Category { get; set; } public bool IsInStock { get; set; } }
优化前的常规写法
public List<Product> FilterProducts(List<Product> allProducts, string searchKeyword, decimal maxPrice, string category) { var result = new List<Product>(); foreach (var product in allProducts) { if (product.Name.Contains(searchKeyword) && product.Price <= maxPrice && product.Category == category && product.IsInStock) { result.Add(product); } } return result; }
优化后的实现
// 复用的库存筛选表达式 private static Expression<Func<Product, bool>> InStockFilter() { return p => p.IsInStock; } public IQueryable<Product> FilterProducts(IQueryable<Product> productQuery, string searchKeyword, decimal maxPrice, string category) { // 先过滤掉无库存商品,减少后续计算基数 var filteredQuery = productQuery.Where(InStockFilter()); // 按需添加搜索条件,避免空条件的无效计算 if (!string.IsNullOrEmpty(searchKeyword)) { filteredQuery = filteredQuery.Where(p => p.Name.Contains(searchKeyword)); } // 添加价格筛选 filteredQuery = filteredQuery.Where(p => p.Price <= maxPrice); // 按需添加分类筛选 if (!string.IsNullOrEmpty(category)) { filteredQuery = filteredQuery.Where(p => p.Category == category); } // 延迟执行:直到调用ToList()/FirstOrDefault()等方法时才会实际计算 return filteredQuery; }
优化逻辑说明:
- 使用
IQueryable作为输入,配合EF Core等ORM可将筛选逻辑转换为SQL,减少数据库返回的数据量 - 分阶段筛选:优先排除不符合基础条件的条目,降低后续条件的计算次数
- 复用筛选表达式:避免重复编写相同逻辑,提升代码可维护性
- 延迟执行:避免提前执行不必要的计算,仅在需要结果时触发查询
提升C#编程能力的实用资源
- 官方文档:微软C#语言规范与.NET API文档,覆盖从基础语法到高级特性的全内容,是最权威的参考资料
- 经典书籍:
- 《C# 7.0本质论》:从基础到进阶的系统讲解,内容贴近实际开发场景
- 《CLR via C#》:深入理解.NET运行时与C#底层机制,适合有基础后进阶提升
- 官方学习路径:微软推出的交互式.NET学习教程,包含项目案例与实操练习,适合边学边练
- 社区讨论:Stack Overflow的C#标签板块,搜索或提问问题,学习他人的解决方案与思路
- 开源项目:阅读或参与GitHub上的C#开源项目(如ASP.NET Core、Entity Framework Core),学习工业级代码的规范与设计模式
- 技术博客:关注微软MVP或资深开发者的博客,了解C#最新特性与最佳实践
内容的提问来源于stack exchange,提问作者Christopher Linington
相关产品推荐
相关产品推荐

