我有一个方法可以根据accountId返回许多交易。
所以,在我的数据访问器中,我这样做:
var items = (from c in Context.transactions where c.accountid == accountId select c).ToList();
然后我调用一个将实体framerwork对象转换为我自己的自定义DTO对象的方法,然后返回一个通过我的服务,逻辑和我的MVC控制器的对象。
翻译获取相邻数据。因此,我的自定义DTO可能有一个名为“AccountName string”和“AccountType string”的字段。
帐户名在一个表中,该表是Transaction表的外键,然后AccountType是Account表的外键。
所以,我的翻译看起来像是:
var return = new TransactionDto {
tranactionId = source.id,
accountName = source.Account.Description,
accountType = source.Account.AccountType.description
}
我似乎有速度问题,我想知道我对Linq的理解是否应该受到指责。我认为初始数据检索的ToList()
是选择的结束。然后它将所有数据传递给var items
..但也许我的翻译实际上正在为“帐户”表做一个选择,然后另一个选择“AccountType
”表。我的意思是,最初的'来自c in Context..
。获取所有外键表?
答案 0 :(得分:3)
这叫做延迟加载。使用Include
急切加载必要的导航属性对象:
var items = Context.transactions
.Include("Account")
.Include("Account.AccountType")
.Where(x => x.accountId == accountId)
.ToList();