2016-12-02 51 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你有没有尝试过..有趣的知道结果! –