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
Libérer: 2024-12-30 05:27:10
original
276 Les gens l'ont consulté

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
        };
Copier après la connexion

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;
}
Copier après la connexion

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);
            }
        }
Copier après la connexion

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]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal