Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu MEZIL

I love .Net

Abonnements

LINQ To Entities : as retourne null, et alors ?

Ce qui suit est très probablement également vrai avec LINQ To SQL.

Je me suis fait avoir comme un bleu sur le forum msdn (voir le thread suivant).

En effet, shlomiw utilise (b as Derived1).Prop_d1 alors que b peut de ne pas être de type Derived1 (et donc (b as Derived1) peut être nul).

Pourtant ça marche !

Pourquoi, c'est très simple, le as, à travers la requête LINQ To Entities, est traduit en SQL.

Prenons les deux cas d'héritage dans EDM:

Soient deux tables TestNull1 et TestNull2:

Prenons le cas du TPT:

La requête SQL générée à partir de la requête LINQ To Entities suivante :

from t in context.TestNull1

select (t as TPTTestNull2).Test2

est :

SELECT
CASE WHEN (CASE WHEN ( NOT (([Project1].[C1] = 1) AND ([Project1].[C1] IS NOT NULL))) THEN '0X' ELSE '0X0X' END LIKE '0X0X%') THEN [Extent1].[Test2] END AS [C1]
FROM  [dbo].[TestNull1] AS [Extent1]
LEFT OUTER JOIN  (SELECT
 [Extent2].[Id] AS [Id],
 cast(1 as bit) AS [C1]
 FROM [dbo].[TestNull2] AS [Extent2] ) AS [Project1] ON [Extent1].[Id] = [Project1].[Id]

 

Dans le cas du TPH :

La requête SQL générée à partir de la requête LINQ To Entities suivante :

from t in context.TestNull1

select (t as TPHDerived).Test2

est :

SELECT
CASE WHEN (CASE WHEN ((CASE WHEN ([Extent1].[Dicriminator] IS NOT NULL) THEN cast(1 as bit) ELSE cast(0 as bit) END) <> cast(1 as bit)) THEN '0X' ELSE '0X0X' END LIKE '0X0X%') THEN [Extent1].[Test2] END AS [C1]
FROM [dbo].[TestNull1] AS [Extent1]

 

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié jeudi 22 mai 2008 07:45 par Matthieu MEZIL

Commentaires

# re: LINQ To Entities : as retourne null, et alors ? @ jeudi 22 mai 2008 17:52

Autant Linq est un outil extremement puissant qui va nous simplifier la vie, autant je sens qu'on va tomber dans un paquet de cas dans ce genre avant qu'on ne le maitrise totalement :p (et je ne parle même pas de l'exécution différée des requêtes...).

KooKiz

# re: LINQ To Entities : as retourne null, et alors ? @ vendredi 23 mai 2008 00:12

D'où l'intérêt de suivre une formation à Winwise ;-)

Matthieu MEZIL

# re: LINQ To Entities : as retourne null, et alors ? @ vendredi 23 mai 2008 10:30

Pour Linq to SQL, tu as effectivement un peu le même fonctionnement (sauf que les possibilités au niveau de la définition de relation d'héritage entre tes entités sont beaucoup plus restreintes).

tu peux meme faire des truc genre :

from employee in ctx.Persons.OfType

<Employee>(), qui te génère le where qui va bien

simon ferquel

# re: LINQ To Entities : as retourne null, et alors ? @ vendredi 23 mai 2008 15:28

Pour l'héritage en LINQ To SQL on est effectivement limité au TPH sur une seule colonne.

Le OfType marche aussi avec LINQ To Entities.

C'est d'ailleurs la solution que j'avais préconnisé sur le forum msdn même si le cas était un peu plus complexe (http://forums.microsoft.com/Forums/ShowPost.aspx?PostID=3385122&amp;SiteID=1&amp;mode=1).

Matthieu MEZIL

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Silverlight 3 : Communication et multicast par Kévin Gosse le il y a 5 heures et 9 minutes

- [Perso] Découvertes estivales : Linux (Part I) par Le blog de FremyCompany le il y a 7 heures et 51 minutes

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 22 heures et 27 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 23 heures et 41 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le 07-03-2009, 09:56

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le 07-03-2009, 09:00

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 07-03-2009, 08:45

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15