2010-11-06 2 views
0

У меня есть следующий запрос Linq:Linq запрос Помощь

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

ETAModule имеет 1: 1 отношение к ЭТОМУ. Однако в базе данных нет FK, которая обеспечивает это (к сожалению). Способ построения моего запроса отлично работает, но я хотел бы включить объект ETA для каждого объекта ETAModule в качестве свойства объекта ETAModule. Конечно, это было бы намного проще, если бы существовал FK. Как я могу изменить свой запрос, чтобы сделать это?

Спасибо.

ответ

1

Вы можете включить ETA в конечной проекции наиболее легко, добавив его анонимный тип:

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

Если вы хотите ет быть свойством из etamodule, вам нужно определить класс который имеет это свойство, например ModuleWithETA. Вы можете затем проект следующим образом:

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

Если вы хотите эквивалент левого внешнего соединения (включая все etamodules, независимо от того, есть ли у них расчетное время прибытия), а затем изменить запрос следующим образом:

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