代码之家  ›  专栏  ›  技术社区  ›  e36M3

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

  •  1
  • e36M3  · 技术社区  · 14 年前

    我有一个表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 回复  |  直到 14 年前
        1
  •  6
  •   Craig Stuntz    14 年前
    var list = (from sec in base.context.Securities
                                        .Include("AccountSecurity")
                where sec.AccountSecurities.Any(as => as.AccountId == accountId)
                select sec).ToList();
    
        2
  •  1
  •   Will    14 年前

    试试这个:

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

    然后根据需要简单地使用Security属性,由于同时读取AccountSecurities(带有join的single SQL),所以它将非常高效。