星期六, 3月 21, 2026

[EFCore] Like

使用 EFCore 10 來整理 Linq to Entity 產生 TSQL like 語法應用

Linq to Entity 語法
using EFCoreLike.Models;
using Microsoft.EntityFrameworkCore;

namespace EFCoreLike
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using var dbContext = new AdventureWorks2022DbContext();

            // StartWith
            var startWithResult = dbContext.Person
                .Where(p => p.LastName.StartsWith("Hen"))
                .ToList();

            // EndWith
            var endWithResult = dbContext.Person
                .Where(p => p.LastName.EndsWith("Hen"))
                .ToList();

            // Containes
            var containResult = dbContext.Person
                .Where(p => p.LastName.Contains("Hen"))
                .ToList();

            // EF.Functions.Like
            var functionsResult = dbContext.Person
                .Where(p => EF.Functions.Like(p.LastName, "H[a-c]n%"))
                .ToList();
        }
    }
}
產生 TSQL Like 語法觀察

StartWith 轉成 關鍵字%
SELECT [p].[BusinessEntityID], [p].[AdditionalContactInfo], [p].[Demographics], [p].[EmailPromotion], [p].[FirstName], [p].[LastName], [p].[MiddleName], [p].[ModifiedDate], [p].[NameStyle], [p].[PersonType], [p].[Suffix], [p].[Title], [p].[rowguid]
FROM [Person].[Person] AS [p]
WHERE [p].[LastName] LIKE N'Hen%'

EndWith 轉成 %關鍵字
SELECT [p].[BusinessEntityID], [p].[AdditionalContactInfo], [p].[Demographics], [p].[EmailPromotion], [p].[FirstName], [p].[LastName], [p].[MiddleName], [p].[ModifiedDate], [p].[NameStyle], [p].[PersonType], [p].[Suffix], [p].[Title], [p].[rowguid]
FROM [Person].[Person] AS [p]
WHERE [p].[LastName] LIKE N'%Hen'

Containes 轉成 %關鍵字%
SELECT [p].[BusinessEntityID], [p].[AdditionalContactInfo], [p].[Demographics], [p].[EmailPromotion], [p].[FirstName], [p].[LastName], [p].[MiddleName], [p].[ModifiedDate], [p].[NameStyle], [p].[PersonType], [p].[Suffix], [p].[Title], [p].[rowguid]
FROM [Person].[Person] AS [p]
WHERE [p].[LastName] LIKE N'%Hen%'

EFCore 2.0 開始支援 EF.Functions.Like 來自訂 TSQL Like 應用
SELECT [p].[BusinessEntityID], [p].[AdditionalContactInfo], [p].[Demographics], [p].[EmailPromotion], [p].[FirstName], [p].[LastName], [p].[MiddleName], [p].[ModifiedDate], [p].[NameStyle], [p].[PersonType], [p].[Suffix], [p].[Title], [p].[rowguid]
FROM [Person].[Person] AS [p]
WHERE [p].[LastName] LIKE N'H[a-c]n%'

EF 6.5.1 StartWith、EndWith 和 Contains 轉出的 TSQL 跟 EFCore 10 是相同的

星期二, 3月 17, 2026

[VS] 在方案總管的檔案下顯示符號

在 VS2026 更版資訊內看見 [在方案總管的檔案下顯示符號] 選項,覺得在 Windows Form 專案上還不錯用

在 .NET10 Window Form 內可以看見 Form1 底下還有很多資訊
VS 選項 => 專案和解決方案 => 一般 => 取消 [在方案總管的檔案下顯示符號],變更設定後需要重啟 VS2026
取消後 Form1 下資訊就不會顯示,但使用方案總管搜尋功能還是會顯示出來的喔
筆記當下 VS2026 版本為 V18.4.0,但之前版本就有才是

星期二, 3月 10, 2026

[C#] 自訂數值字串 - 零

平時都是用標準格式來格式化數值,突然需要應用上自訂格式情況

常用自訂格式
  • 0:零值預留位置
  • #:數字預留位置
  • .:小數點
  • ,:千分位
LinqPad 上執行

用 0 當成對象簡易紀錄一下
void Main()
{
	
	decimal 零 = 0m;

	零.ToString("#,#").Dump($"#,#:顯示空白");

	零.ToString("#,0").Dump("#,0:顯示一個 0");

	零.ToString("#,##0").Dump("#,##0:千分位寫法");
}
基本上用標準格式是最推薦的,能夠自行依據文化特性來進行轉換,並不是每個國家的千分位和小數點都是 , 和 . 的喔

星期四, 3月 05, 2026

[LINQ] TakeWhile、SkipWhile

實務上遇上 TakeWhile、SkipWhile 應用情境,字串資料為 [英文 + 數字] 組合,但英文和數字字元都是隨機長度,使用 TakeWhile 來取出隨機英語字串

使用 LINQPad 來記錄
void Main()
{
  string data = "ABCDE12345".Dump("測試資料");
  (new string(data.TakeWhile(char.IsLetter).ToArray())).Dump("TakeWhile:擷取字母字元,直至字元不是字母停止");
  (new string(data.SkipWhile(char.IsLetter).ToArray())).Dump("SkipWhile:跳過字母字元,直至字元不是字母開始擷取");
}

執行結果


星期三, 3月 04, 2026

[Gmail] 應用程式密碼

之前記錄過 [SQL] Database Mail 搭配 Gmail 發信 - 應用程式密碼 設定應用程式密碼,但現在在網頁上已經找不到滑鼠點擊進入點,可以透過兩種方式進入
  • 直接輸入網址:https://myaccount.google.com/apppasswords
  • 搜尋功能:輸入 [應用程式密碼] 就會出現
最後官方文件 - 使用應用程式密碼登入帳戶 內特別提出警告,自行斟酌使用囉
Important: App passwords aren't recommended and are unnecessary in most cases. To help keep your account secure, use "Sign in with Google" to connect apps to your Google Account.