实体框架,如何在此示例中包含相关实体

时间:2010-11-04 21:08:32

标签: entity-framework entity-framework-4

我有一个表AccountSecurity,这是一个多对多表,它涉及账户实体和证券。当我在下面写下查询时,它会返回满足where子句的所有证券。但是,列表中的每个安全实例都不再引用它来自的AccountSecurity。所以当我列出[0] .AccountSecurity时它是空的。反正有没有包含这些信息?我知道我可以重写查询以返回AccountSecurities并使用.Include(“Security”),但我不知道是否可以采用其他方式。

var list = (from acctSec in base.context.AccountSecurities
            where acctSec.AccountId == accountId
            select acctSec.Security).ToList();

更新

当然,如果我进行两次查询,图表会正确填充,必须有一种方法可以一次完成。

var securities = (from acctSec in base.context.AccountSecurities
            where acctSec.AccountId == accountId
            select acctSec.Security).ToList();

//this query populates the AccountSecurities references within Security instances returned by query above
var xref = (from acctSec in base.context.AccountSecurities
            where acctSec.AccountId == accountId
            select acctSec).ToList();

2 个答案:

答案 0 :(得分:6)

var list = (from sec in base.context.Securities
                                    .Include("AccountSecurity")
            where sec.AccountSecurities.Any(as => as.AccountId == accountId)
            select sec).ToList();

答案 1 :(得分:1)

试试这个:

var list = (from acctSec in base.context.AccountSecurities.Include("Security")
            where acctSec.AccountId == accountId
            select acctSec).ToList();

然后根据需要简单地使用Security属性,因为它与AccountSecurities同时读取(带连接的单个SQL),它将非常有效。