HEL*_*_ME 2 c# linq asp.net entity
遗憾的是,我正在维护一个系统,该系统没有考虑到系统有数百万条记录后会发生什么.
我遇到的问题是代码当前编写的方式主要是GetList方法实际返回数据库中的每个记录,并且过滤是在getfull方法完成的.
我尝试通过将调整的id传递给getlist方法来改变它,但是当我尝试做的时候.所以(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;
}
Run Code Online (Sandbox Code Playgroud)
这样可以解决错误
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);
}
Run Code Online (Sandbox Code Playgroud)
那些包括减慢查询速度.由于查询将只获得一行(并且因为包含而进行其他连接),我认为性能不是那么慢.要提高性能,请为每个外键添加索引.我猜a.Id已经有了聚集索引.