You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何进阶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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 01:54:52