---
title: "LINQ"
date: "2026-04"
category: "隨筆"
tags: ["隨筆"]
description: "這個有點意思，叫做「語言整合查詢」（Language Integrated Query），可以在C#裡用類似sql的查詢方法，只要是列舉類都可以用這個..."
source: "https://enriquemark.com/zh-hant/posts/LINQ"
---

這個有點意思，叫做「語言整合查詢」（Language Integrated Query），可以在C#裡用類似sql的查詢方法，只要是列舉類都可以用這個。

```csharp
/// 沒有 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（去重），元素可以給入去重規則<br>規則的型別需要是`IEqualityComparer<T>` |

然後這裡的關鍵是，查詢的描述跟最終的執行是分開的，所以必須用 `ToList()` 或者是 `ToArray()` 立即執行，亦或者是需要的時候再調這個去執行。

`List` 跟 `Array` 大部分情況下差不多，但最大的不同就是前者可以隨時增減，而後者是固定的。如果是不會變動的場景，後者會比較合適，因為效能更高。而如果需要隨時增減，那就得用前者了。
