2
不幸的是,我維護一個系統,沒有考慮一旦系統有數百萬條記錄會發生什麼。加快linq /實體結果的返回
我遇到的問題是當前編寫代碼的方式,主要是GetList方法實際上返回數據庫中的每條記錄,並且過濾在getfull方法中完成。
當我嘗試這樣做。凡我tryed由然而經過調整的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;
}
嗯這仍然不會解決問題wehre tempResult = tempResult.Include(屬性)加載所有的記錄或將它? – 2012-04-25 17:42:02
它不加載所有記錄。只有某些方法加載ToList(),ToArray(),First等記錄。包含保留延遲執行原理 – 2012-04-26 08:22:59
這實際上沒有工作。 .includes仍然調用數據庫中的所有數據,然後進行過濾。我其實想阻止從數據庫返回所有數據 – 2012-04-30 02:53:04