Équivalent LINQ de ISNULL de SQL
En SQL, la fonction ISNULL permet de substituer une valeur par défaut à la place d'une valeur nulle. Cet article montre comment obtenir un résultat similaire à l'aide de LINQ.
Requête LINQ avec une colonne Nullable
Considérez la requête LINQ suivante :
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 };
Dans cette requête, aa représente la ligne de HandheldDevInfos qui peut exister ou non pour un actif donné. De plus, la colonne xx.Online est un type de bit non nullable.
Définition des valeurs nulles sur False
Pour définir les valeurs nulles de xx.Online sur false, nous peut utiliser l'opérateur de fusion nulle (??). La requête mise à jour ressemblerait à ceci :
select new { AssetID = x.AssetID, Status = aa == null ? false : aa.Online; }
Dans cette requête révisée, si aa est null, la propriété Status sera définie sur false. Sinon, il sera défini sur la valeur aa.Online.
Exemple et équivalent T-SQL
Pour illustrer cette approche dans un contexte plus large, considérons ce qui suit Exemple de requête 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); } }
La requête T-SQL équivalente, qui utilise une approche similaire, est affichée ci-dessous :
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]
En utilisant l'opérateur de fusion nulle, les requêtes LINQ peuvent gérer les valeurs nulles avec élégance, offrant ainsi un moyen pratique de remplacer les valeurs par défaut ou d'effectuer d'autres opérations basées sur la présence ou l'absence de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!