我对网格的ItemSource的当前查询速度非常慢。它目前有8个包含。我已经读过,如果我使用多个查询而不是使用Includes()
,它可以加快速度。引自http://mikee.se/Archive.aspx/Details/entity_framework_pitfalls,_include_20140101
我将查询写入我的数据库
var loans = unitOfWork.Context.Loans.AsNoTracking().ToList();
var clientAccount = unitOfWork.Context.ClientAccounts.AsNoTracking().ToList();
var business = unitOfWork.Context.Businesses.AsNoTracking().ToList();
我正在尝试编写下一个ToLookUp部分,但我不太清楚正确的语法/方法是什么。
Loan.cs模型
public int? Client_Id { get; set; }
[ForeignKey("Client_Id")]
public virtual Business Client { get; set; }
public int? ClientAccount_Id { get; set; }
[ForeignKey("ClientAccount_Id")]
public virtual ClientAccount ClientAccount { get; set; }
Business.cs Model
public virtual ICollection<Loan> Loans { get; set; }
如果它具有1对1的关系,我能够实现查找代码。例如,贷款只能有1个客户帐户。
var clientAccount = unitOfWork.Context.ClientAccounts.AsNoTracking().ToLookup(x => x.LoanId)
但如果不是1比1,我不确定如何实现Lookup和Contains。企业可以有多笔贷款。
var business = unitOfWork.Context.Businesses.AsNoTracking().ToLookup(x => x.Loans);
现在如何设置包含?我在下面尝试但是没有用。
loan.Client = business.Contains(loan.Id)
答案 0 :(得分:0)
Looup - 是一个数据结构,它有一个键的许多值(如Dictionary&gt;)。 因此,当您编写ToLookup(x =&gt; x.LoanId)时,意味着您通过LoandId对实体进行了分组,并且您期望MANY实体。 所以,你需要这样的东西:
var loans = unitOfWork.Context.Loans.AsNoTracking().ToLookup(o=>o.Client_Id);
var clientAccount = unitOfWork.Context.ClientAccounts.AsNoTracking().ToList();
foreach(var cilent in clientAccount)
{
client.Loans = loans[Client.ID].ToArray();
}