Возможно, вы захотите использовать ключевое слово let
для создания «переменных», локальных для запроса (в конечном итоге это будут ваши подзапросы).Например:
var systems = from s in db.Systems
orderby s.Name
let lastException = (from a in s.Applications from e in a.Summaries select e.CreationDate).Max()
...
Другой вариант, который вы могли бы сделать - возможно, создать подзапрос из различных ассоциаций сразу и работать с этими элементами.
var systems = from s in db.Systems
orderby s.Name
from summaries in
(from ta in s.Applications
from te in ta.Summaries
...
select { APPS = ta, SUMMS = te ,/*anything else you want*/ })
let lastExpire = (from summaries select SUMMS.CreationDate).Max()
Черт, вы могли быдаже просто оставьте значение let во втором примере и просто используйте summaries
сущности в ваших последних выборках.Возможно, вам придется немного поэкспериментировать с этим, чтобы убедиться, что вы не получите никакого дублирования значений, но, по крайней мере, таким образом, вы можете просто сделать прямой выбор против summaries
вместо того, чтобы каждый раз переписывать свои подзапросы.