2010-09-23 7 views
1

Je suis encore nouveau pour EF, et je l'ai compris certaines requêtes de base. Je suis perplexe sur l'une des choses les plus difficiles que j'essaie d'accomplir.EF Aide à la requête. requête difficile avec les types interhited et auto référencement

J'ai 4 entités utilisateur, locataire, Bâtiment, Appartement

Locataire hérite de l'utilisateur

À ce stade, un utilisateur qui n'est pas un locataire peut être considéré comme un propriétaire.

utilisateur (propriétaire) a un à plusieurs bâtiments

Les bâtiments ont un à plusieurs Appartements

Appartement a un à plusieurs locataires (un actif à un moment donné)

Je suis en train de figure comment créer une requête EF qui me donnera la liste des locataires pour un utilisateur donné (propriétaire).

Le SQL qui me donne ce que je veux est:

SELECT u2.User_ID AS TenantUser_ID, u2.UserName 
FROM Users u 
LEFT JOIN rt_UserBuilding ub ON u.User_ID = ub.User_ID 
LEFT JOIN Buildings b ON ub.Building_ID = b.Building_ID 
LEFT JOIN Apartments a ON a.Building_ID = b.Building_ID 
LEFT JOIN Tenants t ON a.Apartment_ID = t.Apartment_ID 
LEFT JOIN Users u2 ON t.User_ID = u2.User_ID 
WHERE u.User_ID = 1 AND t.User_ID IS NOT NULL 

Répondre

0

En supposant que votre classe Building a la propriété

User Landlord 

la façon la plus simple est de le faire:

context.Tenants.Where(tenant => tenant. 
           Apartment. 
           Building. 
           Landlord.Id == yourLandlord.Id 
        ).ToList();