Linq和他们的子查询

时间:2014-01-15 22:56:13

标签: linq entity-framework

我有一个方法可以根据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..。获取所有外键表?

1 个答案:

答案 0 :(得分:3)

这叫做延迟加载。使用Include急切加载必要的导航属性对象:

var items = Context.transactions
                   .Include("Account")
                   .Include("Account.AccountType")
                   .Where(x => x.accountId == accountId)
                   .ToList();