У меня следующая структура таблицы:
Таблица A, Таблица B, Таблица C и Таблица D, где
A 1..* B
A 1..* C
C 1..* D
Для начала я хотел, чтобы все данные были возвращены (через службу WCFпоэтому не ленивая загрузка) так что это был оригинальный код:
var a = (from a in context.As.Include("Bs").Include("Cs.Ds")
where a.Id = paramId
select a).SingleOrDefault();
Возвращает объект A с объектами EntityCollections из Bs и Cs и C, каждый из которых имеет EntityCollection из Ds
Однако оба Bи C имеет флаг IsActive
, и теперь я хочу возвращать только те B и C, где Active.
Я знаю, что теперь я не могу использовать .Include
, поскольку это всегда будет возвращать всю коллекцию.
После некоторого поиска в Google, пока у меня есть:
var query = (from a in context.As
where a.Id = paramId
select new
{
A = a,
Bs = from b in a.Bs where b.IsActive select b,
Cs = from c in a.Cs where c.IsActive select c
}).SingleOrDefault();
Это лучший способ сформировать запрос?
Затем я преобразовываю анонимный тип в объект A:
var a = query.A;
foreach (var b in query.Bs)
{
a.Bs.Add(b);
}
foreach (var c in query.Cs)
{
a.Cs.Add(c);
}
Это лучший способ объединить As, B и C в A с EntityCollections?
Как мне также получить D в качестве коллекции для каждого C?