2010-11-06 6 views
0

J'ai la requête Linq suivante:requête LINQ Aide

from etamodule in ETAModule 
join eta in ETA on etamodule.ExpID equals eta.ExpID 
where etamodule.SubID== "101106261013" 
select new { etamodule } 

ETAModule a une relation 1: 1 à l'ETA. Cependant, il n'y a pas de FK dans la base de données qui impose cela (malheureusement). La façon dont ma requête est construite fonctionne correctement, mais je voudrais inclure l'entité ETA pour chaque entité ETAModule, en tant que propriété de l'entité ETAModule. Bien sûr, ce serait beaucoup plus facile si un FK existait. Comment puis-je modifier ma requête pour cela?

Merci.

Répondre

1

Vous pouvez inclure eta dans la projection finale le plus facilement en ajoutant au type anonyme:

from etamodule in ETAModule 
join eta in ETA on etamodule.ExpID equals eta.ExpID 
where etamodule.SubID== "101106261013" 
select new { etamodule, eta } 

Si vous voulez eta pour être un propriété de etamodule, vous aurez besoin de définir une classe qui a cette propriété, par exemple, ModuleWithETA. Vous pouvez ensuite projet comme suit:

... 
select new ModuleWithEta 
{ 
    ID = etamodule.ID, 
    Name = etamodule.Name, 
    ... 
    ETA = eta 
} 

Si vous voulez que l'équivalent d'une jointure externe gauche (y compris tous les etamodules, indépendamment du fait qu'ils ont une ETA), puis modifiez votre requête comme suit:

from etamodule in ETAModule 
where etamodule.SubID = "..." 
select new 
{ 
    etamodule, 
    eta = ETA.FirstOrDefault (e => e.ExpID == etamodule.ExpID) 
}