Heim > Datenbank > MySQL-Tutorial > Wie gehe ich mit NULL-Werten in LINQ um: Das Äquivalent von SQLs ISNULL?

Wie gehe ich mit NULL-Werten in LINQ um: Das Äquivalent von SQLs ISNULL?

DDD
Freigeben: 2024-12-30 05:27:10
Original
282 Leute haben es durchsucht

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

LINQ-Äquivalent von SQLs ISNULL

In SQL ermöglicht die ISNULL-Funktion, einen Nullwert durch einen Standardwert zu ersetzen. In diesem Artikel wird gezeigt, wie Sie mit LINQ ein ähnliches Ergebnis erzielen.

LINQ-Abfrage mit einer Nullable-Spalte

Betrachten Sie die folgende LINQ-Abfrage:

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
        };
Nach dem Login kopieren

In dieser Abfrage stellt aa die Zeile von HandheldDevInfos dar, die für ein bestimmtes Asset vorhanden sein kann oder nicht. Darüber hinaus ist die Spalte „xx.Online“ ein nicht nullbarer Bittyp.

Nullwerte auf „False“ setzen

Um Nullwerte für „xx.Online“ auf „false“ zu setzen, haben wir kann den Nullkoaleszenzoperator (??) verwenden. Die aktualisierte Abfrage würde wie folgt aussehen:

select new {
    AssetID = x.AssetID,
    Status = aa == null ? false : aa.Online;
}
Nach dem Login kopieren

Wenn aa in dieser überarbeiteten Abfrage null ist, wird die Status-Eigenschaft auf „false“ gesetzt. Andernfalls wird es auf den Wert von aa.Online gesetzt.

Beispiel und äquivalentes T-SQL

Um diesen Ansatz in einem größeren Kontext zu veranschaulichen, betrachten Sie Folgendes Northwind-Beispielabfrage:

        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);
            }
        }
Nach dem Login kopieren

Die entsprechende T-SQL-Abfrage, die einen ähnlichen Ansatz verwendet, wird angezeigt unten:

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]
Nach dem Login kopieren

Durch die Verwendung des Null-Koaleszenzoperators können LINQ-Abfragen Nullwerte elegant verarbeiten und bieten so eine bequeme Möglichkeit, Standardwerte zu ersetzen oder andere Operationen basierend auf dem Vorhandensein oder Fehlen von Daten durchzuführen.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit NULL-Werten in LINQ um: Das Äquivalent von SQLs ISNULL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage