gpt4 book ai didi

c# - 加快 linq/entity 结果的返回

转载 作者:行者123 更新时间:2023-12-02 22:44:05 26 4
gpt4 key购买 nike

不幸的是,我维护的系统没有考虑一旦系统拥有数百万条记录会发生什么。

我遇到的问题是目前编写代码的方式主要是 GetList 方法实际上返回数据库中的每条记录,并且过滤是在 getfull 方法中完成的。

我尝试通过将调整的 ID 传递给 getlist 方法来更改它,但是当我尝试这样做时 .Where(a=>a.Id == journalid)我得到这个错误

无法将类型“System.Linq.IQueryable”隐式转换为“System.Data.Objects.ObjectQuery”

public Adjustment GetFull(int id) {
var result = GetList(id).FirstOrDefault(ja => ja.Id == id);
if(result == null) {
throw new InvalidOperationException(
String.Format(" Adjustment with Id={0} not found.", id)
);
}
return LoadFullActivities(result);
}


private IQueryable<Adjustment> GetList(int journalid) {
return GetList(journalid,"Original", "Activities",
"Original.Employee", "Original.Employee.EmployeeType",
"Original.Employee.WorkType", "Original.Employee.Department",
"Original.Activities", "Original.Status",
"Original.Approver", "Status");
}

private IQueryable<Adjustment> GetList(int journalid, params string[] includes) {
var tempResult = dataContext.AdjustmentSet;
foreach (var property in includes) {
tempResult = tempResult.Include(property).Where(a=>a.Id == journalid) ;
}
return tempResult;
}

最佳答案

这将修复错误

private IQueryable<Adjustment> GetList(int journalid, params string[] includes) {
var tempResult = dataContext.AdjustmentSet.AsQueryable();
foreach (var property in includes) {
tempResult = ((ObjectQuery<Adjustment>)tempResult).Include(property);
}
return tempResult.Where(a=>a.Id == journalid);
}

那些包括减慢查询。由于查询将只获取一行(并且由于包含而进行其他连接)我认为性能不会这么慢。要提高性能,请为每个外键添加索引。我猜 a.Id 已经有聚集索引了。

关于c# - 加快 linq/entity 结果的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com