在官方文件 - 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 前版本,執行會出現下面錯誤訊息
沒有留言:
張貼留言