EnriqueMark
随笔

LINQ

2026-04 简体中文

这个有点意思,叫做「语言整合查询」(Language Integrated Query),可以在C#里用类似sql的查询方法,只要是枚举类都可以用这个。

/// 沒有 LINQ 的寫法
var result = new List<string>();
foreach (var f in files)
{
    if (f.Contains(keyword))
        result.Add(f);
}

/// 有 LINQ 的寫法
var result = files.Where(f => f.Contains(keyword)).ToList();

常用方法:

方法作用
.Where()筛选(过滤条件)
.Select()转换(这个就是map,对每个元素执行自定函数操作)
.FirstOrDefault()取第一个,没有就返回 null
.Any()有没有符合条件的元素
.Count()计算数量
.OrderBy()排序
.ToList() / .ToArray()具体化结果
.ToHashSet()转为哈希Set(去重),元素可以给入去重规则
规则的类型需要是IEqualityComparer<T>

然后这里的关键是,查询的描述跟最终的执行是分开的,所以必须用 ToList() 或者是 ToArray() 立即执行,亦或者是需要的时候再调这个去执行。

ListArray 大部分情况下差不多,但最大的不同就是前者可以随时增减,而后者是固定的。如果是不会变动的场景,后者会比较合适,因为性能更高。而如果需要随时增减,那就得用前者了。