早上好,
我继承了一个没有外键关系的数据库,项目是这样的,我必须忽略这个主要问题并解决它。显然,这消除了实体框架的一些较冷的功能,为我提供了相关的实体。
所以我被迫做了这样的事情:
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
答案 0 :(得分:0)
您是否只是在寻找.Join()
扩展方法?例如,加入Infoes
和Accounts
可能如下所示:
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()
扩展程序来进一步加入更多表格,并从每个表格中返回您想要的任何内容。