Entity framework 实体框架,如何在此示例中包括相关实体

Entity framework 实体框架,如何在此示例中包括相关实体,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,我有一个表AccountSecurity,它是一个多对多的表,涉及账户实体和证券。当我在下面写查询时,它返回满足where子句的所有证券。但是,列表中的每个安全实例不再引用它来自的AccountSecurity。因此,当我执行列表[0]时,AccountSecurity是空的。是否有必要包括这些信息?我知道我可以重写查询以返回AccountSecurities,并在上面使用.Include(“Security”),但我想知道是否可以用另一种方法 var list = (from acctSec

我有一个表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();
试试这个:

var list = (from acctSec in base.context.AccountSecurities.Include("Security")
            where acctSec.AccountId == accountId
            select acctSec).ToList();
然后只需根据需要使用Security属性,因为它是在AccountSecurities(带join的单SQL)的同时读取的,所以它将非常有效。

尝试以下方法:

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

然后根据需要使用Security属性,因为它是在AccountSecurities(带join的单SQL)的同时读取的,所以它将非常有效。

AccountSecurity是一个多对多表。这意味着只有sec.AccountSecurities,因为单个证券可以属于多个帐户。我尝试执行sec.AccountSecurities[0]。AccountId==AccountId,但这会引发异常。谢谢!我把它看了一遍,我看到的唯一问题是,返回的证券将引用它们所属的所有帐户,而不仅仅是accountId指定的帐户。换句话说,如果我有5个证券,但这5个证券映射到2000个帐户,那么我将返回5x2000行。我认为可能更有效的方法是先进行两次查询,用证券填充图形,然后是AccountSecurity(多对多)信息。AccountSecurity是一个多对多表。这意味着只有sec.AccountSecurities,因为单个证券可以属于多个帐户。我尝试执行sec.AccountSecurities[0]。AccountId==AccountId,但这会引发异常。谢谢!我把它看了一遍,我看到的唯一问题是,返回的证券将引用它们所属的所有帐户,而不仅仅是accountId指定的帐户。换句话说,如果我有5个证券,但这5个证券映射到2000个帐户,那么我将返回5x2000行。我认为可能更有效的方法是先进行两次查询,用证券填充图形,然后再使用AccountSecurity(多对多)信息。这将返回AccountSecurity实体列表,而不是安全实体列表。我知道我可以通过AccountSecurity轻松地提取它们。安全性,但我还有另一个问题。实际上,我并没有像前面描述的那样马上去ToList()。我通过我编写的一个方法来运行它们,以便对这些结果进行动态排序/分页。长话短说,我需要返回为安全类型的顶级实体。然后,除非同时选择原始AccountSecurity对象,否则您将丢失返回该对象的链接。例如。。。选择新建{Acct=acctSec,Sec=acctSec.Security}。或者,为什么不使用Linq为您进行排序/分页?跳过并采取措施?这样,您就可以自由地选择任何您想要的内容,对其进行排序,并进行分页。在一个可怕的(长)linq善良行中。我确实使用linq进行排序。然而,这是我写的一个“动态”方法,它将字符串作为排序表达式,表示顶级实体的属性,排序依据、排序方向和iQuery。除非IQuerable中的顶级(根)实体与排序表达式匹配,否则此方法将不起作用。如果我将AccountSecurity作为根传递给它,将SecurityName作为排序表达式传递给它,它将爆炸。所以你可以看到我在这里陷入了困境:)这可能只是因为我必须在两个查询中完成这项工作,因为我在主帖子的更新说明中发布了。这将返回AccountSecurity实体列表,而不是安全实体列表。我知道我可以通过AccountSecurity轻松地提取它们。安全性,但我还有另一个问题。实际上,我并没有像前面描述的那样马上去ToList()。我通过我编写的一个方法来运行它们,以便对这些结果进行动态排序/分页。长话短说,我需要返回为安全类型的顶级实体。然后,除非同时选择原始AccountSecurity对象,否则您将丢失返回该对象的链接。例如。。。选择新建{Acct=acctSec,Sec=acctSec.Security}。或者,为什么不使用Linq为您进行排序/分页?跳过并采取措施?这样,您就可以自由地选择任何您想要的内容,对其进行排序,并进行分页。在一个可怕的(长)linq善良行中。我确实使用linq进行排序。然而,这是我写的一个“动态”方法,它将字符串作为排序表达式,表示顶级实体的属性,排序依据、排序方向和iQuery。除非IQuerable中的顶级(根)实体与排序表达式匹配,否则此方法将不起作用。如果我将AccountSecurity作为根传递给它,将SecurityName作为排序表达式传递给它,它将爆炸。所以你看,我在这里陷入了困境:)这可能只是因为我必须在两个查询中完成这项工作,因为我在主帖子的更新说明中发布了这项工作。