我有一个表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();
答案 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),它将非常有效。