e36M3
e36M3

Reputation: 6022

Entity Framework, How to include related entities in this example

I have a table AccountSecurity which is a many-to-many table that relates Account entities and Securities. When I write the query below it returns all Securities that satisfy the where clause. However each Security instance in the list no longer has the reference to the AccountSecurity it came from. So when I do list[0].AccountSecurity it is empty. Is there anyway to include that information? I know I can rewrite the query to return AccountSecurities instead and use .Include("Security") on that, but I wonder if it can be done another way.

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

UPDATE

Of course if I do two queries the graph gets populated properly, there has to be a way to do this in one shot.

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();

Upvotes: 1

Views: 6505

Answers (2)

Craig Stuntz
Craig Stuntz

Reputation: 126567

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

Upvotes: 6

Will
Will

Reputation: 2532

Try this:

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

Then simply use the Security property as needed, and since it's read at the same time AccountSecurities is (single SQL with join), it will be very efficient.

Upvotes: 1

Related Questions