当前位置:首页 > C# > 正文

C# LINQ Where筛选条件的高级写法(掌握高效数据过滤技巧)

在C#开发中,LINQ(Language Integrated Query) 是处理集合数据的强大工具。其中 Where 方法用于根据指定条件筛选数据,是开发者最常用的功能之一。本文将带你从基础到进阶,全面掌握 C# LINQ Where条件筛选 的高级写法,即使是编程小白也能轻松上手!

C# LINQ Where筛选条件的高级写法(掌握高效数据过滤技巧) Where条件筛选 LINQ高级用法 C#数据过滤技巧 LINQ动态查询 第1张

一、基础回顾:Where 的基本用法

首先,我们快速回顾一下 Where 的基础语法:

var numbers = new List { 1, 2, 3, 4, 5, 6 };var evenNumbers = numbers.Where(x => x % 2 == 0).ToList();// 结果: [2, 4, 6]

这里使用 Lambda 表达式 x => x % 2 == 0 筛选出所有偶数。

二、高级技巧1:多条件组合筛选

实际开发中,我们经常需要同时满足多个条件。可以使用逻辑运算符 &&(与)、||(或)进行组合:

var products = new List{    new Product { Name = "苹果", Price = 5, Category = "水果" },    new Product { Name = "香蕉", Price = 3, Category = "水果" },    new Product { Name = "牛奶", Price = 8, Category = "饮品" }};// 筛选价格大于4且属于“水果”类别的商品var filtered = products.Where(p => p.Price > 4 && p.Category == "水果").ToList();

三、高级技巧2:动态构建 Where 条件

在 Web 开发或搜索功能中,用户输入的筛选条件往往是动态的。这时不能写死 Lambda 表达式,而应动态构建查询条件。以下是两种常用方法:

方法一:链式调用 Where(推荐)

IQueryable query = products.AsQueryable();if (!string.IsNullOrEmpty(searchKeyword))    query = query.Where(p => p.Name.Contains(searchKeyword));if (minPrice.HasValue)    query = query.Where(p => p.Price >= minPrice.Value);if (!string.IsNullOrEmpty(category))    query = query.Where(p => p.Category == category);var result = query.ToList();

这种方式利用了 LINQ 的延迟执行特性,只有在调用 ToList() 时才真正执行 SQL(如果是 Entity Framework)或遍历集合。

方法二:使用 PredicateBuilder(需引入 LinqKit)

如果你需要更复杂的动态表达式(比如 OR 条件),可以使用第三方库如 LinqKit

// 需先安装 NuGet 包:LinqKitusing LinqKit;var predicate = PredicateBuilder.New(true); // 初始为 trueif (!string.IsNullOrEmpty(keyword))    predicate = predicate.And(p => p.Name.Contains(keyword));if (priceRange == "cheap")    predicate = predicate.Or(p => p.Price < 5); // 注意这里是 Orvar result = products.AsExpandable().Where(predicate).ToList();

四、高级技巧3:使用自定义方法作为筛选条件

你也可以将复杂的判断逻辑封装成方法,提高代码可读性:

bool IsPremiumProduct(Product p){    return p.Price > 10 && !p.Name.StartsWith("测试");}var premiumProducts = products.Where(IsPremiumProduct).ToList();

注意:如果使用 Entity Framework,自定义方法可能无法转换为 SQL,此时应改用表达式树(Expression)。

五、性能提示与最佳实践

  • 尽量使用 IQueryable<T> 而非 IEnumerable<T>,以便在数据库层面完成筛选(适用于 EF Core)。
  • 避免在 Where 中调用外部方法或属性,可能导致全表扫描。
  • 动态查询时,优先使用链式 Where,简单且高效。

六、总结

通过本文,你已经掌握了 C# LINQ Where条件筛选 的多种高级写法,包括多条件组合、动态查询构建、自定义方法等。这些技巧不仅能提升你的 LINQ高级用法 水平,还能显著优化应用的 C#数据过滤技巧。在复杂业务场景中,合理使用 LINQ动态查询 将让你的代码更加灵活、可维护。

小贴士:多练习、多调试,你会发现 LINQ 的强大远超想象!