Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu MEZIL

I love .Net

Abonnements

Actualités

Locations of visitors to this page English blog
Locations of visitors to this blog
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

Classé sous : , , , ,

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

- un Pacman en Silverlight 2b2 par Pierrick's Blog le il y a 5 heures et 17 minutes

- Une table -> deux entity types sans colonne discriminante en base, gestion des relations par Matthieu MEZIL le il y a 13 heures et 15 minutes

- ssdl view et TPT par Matthieu MEZIL le 07-05-2008, 02:04

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le 07-05-2008, 01:08

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00