1
我有以下层次LINQ到实体:嵌套列表的条件装载
class Account
string username
List Delegations
class Delegation
List SingleDelegations
class SingleDelegation
string uid
现在,我想执行它加载一个Account
对象与根据依赖关系的查询中的对象(即代表团和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将子对象包含在查询s.t中。最后,我正确加载了我的Account
对象。
我的问题:
有更好,更好的方法吗?