OrderBy(e => e.NullableNavigationProperty.SomeValue) v EF Core

Při code-reviews se opakovaně setkávám se snahou ošetřit null v OrderBy/Where a v podobných LINQ extension metodách při použití EF Core. Například

 .OrderBy(e => e.BossId.HasValue ? e.Boss.LastName : String.Empty)

Je to obvykle nadbytečné, ba dokonce nežádoucí.

LINQ provider výraz nevykonává, ale překládá do SQL, takže pohodlně funguje

.OrderBy(e => e.Boss.LastName)

přestože Boss může být NULL.

Možná takový zápis v C# tahá za oči, ale spíš bych se obával tu expression pro EF Core jakkoliv komplikovat, aby z toho nevznikl nějaký složitější dotaz než je potřeba.

Konkrétně krátká podoba vytvoří SQL klauzuli

ORDER BY [e].[LastName]

a SQL si s NULL pohodlně poradí, zatímco dlouhá podoba udělá

ORDER BY CASE
    WHEN [e].[Id] IS NOT NULL THEN [e].[LastName]
    ELSE N''''
END

…což obvykle nepotřebujete a v T-SQL by vás to nejspíš nikdy nenapadalo takhle řešit.

Zanechat odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s