У меня есть объект со следующей иерархией
class Account
string username
List Delegations
class Delegation
List SingleDelegations
class SingleDelegation
string uid
Теперь я хотел бы выполнить запрос, который загружает объект Account
с уже загруженными соответствующими зависимостями (т.е. Delegations and Delegations.SingleDelegations)(с этим единственным запросом), , но , он должен загружать только те из них, которые соответствуют указанному условию, а именно
- только те учетные записи, для которых имя пользователя соответствует параметру (просто)
- только те
SingleDelegation
объекты, где uid соответствует заданному параметру
Мой подход
У меня есть следующий метод в моем AccountRepository
public Account ReadAccountsByUsernameAndUid(string username, string uid)
{
var matchingObjs = (from a in context.Accounts
from d in a.Delegations
from sd in d.SingleDelegations
where
a.username == username &&
sd.uid == uid
select new
{
Account = a,
Delegation = d,
SingleDelegation = sd
});
//knowing there should be just one account (ignore the missing null check for now)
return matchingObjs.FirstOrDefault<Account>().Account;
}
Это, очевидно, возвращает объект анонимного типа, в котором различные объекты представлены как свойства.Так как Account
и Delegation
и SingleDelegation
связаны через соответствующие FK, мой Account
объект будет иметь их должным образом загруженными (поскольку контекст знает их).
Лично это выглядит странно.Мне нужно создать новый анонимный тип для инструктирования EF для включения подобъектов в запрос st. В конце я получаю Account
правильно загруженный объект.
Мой вопрос:
Есть ли лучший, более приятный способ?