如果你是一名2025年的.NET开发者,却没有充分发挥LINQ的全部潜力,那么你正在编写不必要的冗余代码。
多年来,我在企业应用、微服务甚至个人工具中反复使用这10个LINQ模式。这些模式不仅能减少样板代码——更能清晰地表达代码意图。
让我们开始吧 🚀
🔹 1. 过滤与投影组合
var emails = users
.Where(u => u.IsActive)
.Select(u => u.Email);
使用场景:单行代码完成数据筛选和格式化的优雅方式,特别适合DTO生成
🔹 2. GroupBy + SelectMany 扁平化处理
var groupedTasks = tasks
.GroupBy(t => t.ProjectId)
.SelectMany(g => g.Select(t => new { g.Key, t.Title }));
使用场景:在保留上下文的同时扁平化分组数据——报表工具的完美选择
🔹 3. Any() 快速检查
if (orders.Any(o => o.Total > 1000)) { ... }
使用场景:只需判断是否存在满足条件的元素时,比循环更简洁的替代方案
🔹 4. ToDictionary() 快速查找
var userDict = users.ToDictionary(u => u.Id);
使用场景:需要基于ID快速查找时,避免多次循环
🔹 5. C# 12 的 DistinctBy()
var distinctUsers = users.DistinctBy(u => u.Email);
使用场景:按属性去重的革命性方法,不再需要自定义IEqualityComparer
🔹 6. Zip() 元素配对
var paired = names.Zip(roles, (name, role) => $"{name} is a {role}");
使用场景:逐行合并两个列表时,既优雅又富有表达力
🔹 7. TakeWhile & SkipWhile
var streak = scores.TakeWhile(s => s > 80);
使用场景:完美处理渐进式筛选,如考勤连续记录、游戏得分等场景
🔹 8. Chunk() 分批处理
var batches = orders.Chunk(10);
使用场景:较新的LINQ API——非常适合批量处理,如API调用或数据插入
🔹 9. Aggregate 自定义聚合
var sentence = words.Aggregate((acc, w) => $"{acc} {w}");
使用场景:当需要超出Sum()或Count()的自定义聚合器时非常强大
🔹 10. OrderByDescending().ThenBy()
var sorted = users
.OrderByDescending(u => u.Score)
.ThenBy(u => u.Name);
使用场景:处理多级排序时至关重要,在排行榜逻辑中特别有用