2016-12-02 66 views
1

我有2個列表&我在查詢此列表。這兩個列表都填充了大量數據。所以查詢需要很長時間。Linq - 查詢2列表優化

當我通常面對這個性能問題時,我簡單地轉換SQL查詢&直接運行它們&在一個數據表中得到結果。但是這次我不能這樣做,因爲這兩個不是表格,而是模型列表。

如何優化此查詢或我應該做什麼?

代碼: -

List<TempInOut> listTempInOut = new List<TO_TempInOut>(); 
List<ShiftSchedule> tempShiftSch = new List<TO_TempInOut>(); 

var data = (from B in tempShiftSch 
            from C in listTempInOut 
            where 
             B.CompanyId == companyId && 
             C.CompanyId == companyId && 
             B.EmployeeId == C.EmployeeId && 
             C.InDate >= StrOutStart && 
             C.InDate <= StrOutEnd && 
             B.ShiftId == item.ShiftCode && 
             B.ShiftDate == tempInputDate 
            select new 
            { 
             C.EmployeeId, 
             C.InDate, 
             C.Time_Date1 
            }).ToList(); 

回答

0

您的類型實現一個的IEqualityComparer,使用HashSet的每個集合,並使用HashSet.Intersect方法讓你的輸出。

0

您可以將查詢簡化爲兩個步驟並比較時間。 我在想那樣的事情。

var listTempInOutResult = listTempInOut.Where(C => C.CompanyId == companyId 
               && C.InDate >= StrOutStart 
               && C.InDate <= StrOutEnd); 
var employessIds = listTempInOutresult.Select(x => x.EmployeeId).ToList(); 

var data = tempShiftSch.Where(B => employessIds.Contains(B.EmployeeId) 
           && B.CompanyId == companyId 
           && B.ShiftDate == tempInputDate 
           && B.ShiftId == item.ShiftCode) 
         .Select(C=> new 
         { 
          C.EmployeeId, 
          C.InDate, 
          C.Time_Date1 
         }).ToList(); 
+0

@Anup你有沒有嘗試過..有趣的知道結果! –