星期一, 3月 25, 2024

[EFCore] Contain

在官方文件 - Contains 在 LINQ 查詢中,可能會停止在舊版 SQL Server 上運作 上有特別提到,Linq Contain 會使用 TSQL OPENJSON 語法,而 OPENJSON 是從 2016 (相容性層級 130) 才開始支援,就無法支援每一個 SQL Server 版本,來驗證並筆記

EF Core 8 使用 Linq Contain 語法連結 SQL Server 2022 (相容性層級 160) 
namespace ContainIssue
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using var context = new AdventureWorks2022Context();

            string[] lastNames = new string[] { "Alberts", "Bennett" };
            var source = context.People
                .Where(w => !lastNames.Contains(w.LastName));
            
            Console.WriteLine("TSQL 語法:");
            Console.WriteLine(source.ToQueryString());
            Console.WriteLine("-----------");
            Console.WriteLine($"資料筆數:{source.Count()}");

        }
    }
}

執行結果


故意切換至 SQL Server 2016 前版本,執行會出現下面錯誤訊息

沒有留言:

張貼留言