Maison >base de données >tutoriel mysql >Comment gérer les valeurs NULL dans LINQ : l'équivalent de ISNULL de SQL ?

Comment gérer les valeurs NULL dans LINQ : l'équivalent de ISNULL de SQL ?

DDD
DDDoriginal
2024-12-30 05:27:10280parcourir

How to Handle NULL Values in LINQ: The Equivalent of SQL's ISNULL?

É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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn