LINQ Equivalent of SQL's ISNULL
Dalam SQL, fungsi ISNULL membenarkan seseorang untuk menggantikan nilai lalai sebagai ganti nilai nol. Artikel ini menunjukkan cara untuk mencapai hasil yang serupa menggunakan LINQ.
Pertanyaan LINQ dengan Lajur Boleh Null
Pertimbangkan pertanyaan LINQ berikut:
var hht = from x in db.HandheldAssets join a in db.HandheldDevInfos on x.AssetID equals a.DevName into DevInfo from aa in DevInfo.DefaultIfEmpty() select new { AssetID = x.AssetID, Status = xx.Online };
Dalam pertanyaan ini, aa mewakili baris daripada HandheldDevInfos yang mungkin wujud atau tidak untuk sesuatu aset. Selain itu, lajur xx.Online ialah jenis bit yang tidak boleh dibatalkan.
Menetapkan Nilai Null kepada Palsu
Untuk menetapkan nilai nol untuk xx.Online kepada false, kami boleh menggunakan operator penggabungan null (??). Pertanyaan yang dikemas kini akan kelihatan seperti ini:
select new { AssetID = x.AssetID, Status = aa == null ? false : aa.Online; }
Dalam pertanyaan yang disemak ini, jika aa adalah batal, sifat Status akan ditetapkan kepada palsu. Jika tidak, ia akan ditetapkan kepada nilai aa.Online.
T-SQL Contoh dan Setara
Untuk menggambarkan pendekatan ini dalam konteks yang lebih besar, pertimbangkan perkara berikut Pertanyaan contoh Northwind:
using(var ctx = new DataClasses1DataContext()) { ctx.Log = Console.Out; var qry = from boss in ctx.Employees join grunt in ctx.Employees on boss.EmployeeID equals grunt.ReportsTo into tree from tmp in tree.DefaultIfEmpty() select new { ID = boss.EmployeeID, Name = tmp == null ? "" : tmp.FirstName }; foreach(var row in qry) { Console.WriteLine("{0}: {1}", row.ID, row.Name); } }
Pertanyaan T-SQL yang setara, yang menggunakan pertanyaan serupa pendekatan, ditunjukkan di bawah:
SELECT [t0].[EmployeeID] AS [ID], (CASE WHEN [t2].[test] IS NULL THEN CONVERT(NVarChar(10),@p0) ELSE [t2].[FirstName] END) AS [Name] FROM [dbo].[Employees] AS [t0] LEFT OUTER JOIN ( SELECT 1 AS [test], [t1].[FirstName], [t1].[ReportsTo] FROM [dbo].[Employees] AS [t1] ) AS [t2] ON ([t0].[EmployeeID]) = [t2].[ReportsTo]
Dengan menggunakan operator penggabungan nol, pertanyaan LINQ boleh mengendalikan nilai nol dengan elegan, menyediakan cara yang mudah untuk menggantikan nilai lalai atau melaksanakan operasi lain berdasarkan kehadiran atau ketiadaan data.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai NULL dalam LINQ: Setara dengan ISNULL SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!