使用Entity Framework连接表的更好方法

时间:2017-06-12 18:39:25

标签: c# entity-framework

早上好,

我继承了一个没有外键关系的数据库,项目是这样的,我必须忽略这个主要问题并解决它。显然,这消除了实体框架的一些较冷的功能,为我提供了相关的实体。

所以我被迫做了这样的事情:

using (var db = new MyEntities())
{
    Entities.Info record = db.Infoes.Where(x => x.UserId == authInfo.User.Id).FirstOrDefault();

    //Get all the accounts for the user
    List<Entities.AcctSummary> accounts = db.AcctSummaries.Where(x => x.InfoId == record.Id).ToList();

    //Loop through each account
    foreach (Entities.AcctSummary account in accounts)
    {
        //pull records for account
        List<Entities.Records> records= db.Records.Where(x => x.AcctSummaryId == account.Id).ToList();
    }
}

如果有更好的方式加入“记录”和“帐户”实体,或者可能是在单个查询中获取“记录”的更有效方式?

TIA

1 个答案:

答案 0 :(得分:0)

您是否只是在寻找.Join()扩展方法?例如,加入InfoesAccounts可能如下所示:

var accounts = db.Infoes.Join(db.Accounts,
                              i => i.Id,
                              a => a.InfoId,
                              (info, account) => new { info, account });

这将导致accounts是具有两个属性的匿名类型的枚举,一个是Info记录,另一个是Account记录。该集合将是已加入记录的完整超集。

您当然可以返回new { info, account }之外的其他内容,它就像您在.Select()条款中添加的内容一样。无论您从这些连接表中选择什么,都会在accounts中进行枚举。您可以通过更改.Join()扩展程序来进一步加入更多表格,并从每个表格中返回您想要的任何内容。