2016-12-02 2 views
1

私は2つのリストを持っています&私はこの2つのリストを照会しています。両方のリストには膨大なデータが格納されています。したがって、クエリには長い時間がかかります。Linq - 2リストの最適化のクエリ

私は通常このパフォーマンスの問題に直面していますが、単純にSQLクエリ&を変換して実行します。&結果をデータテーブルで取得してください。しかし今回は、これらの2つがテーブルではなく、モデルのリストであるため、私はこれを行うことができません。

このクエリを最適化するにはどうすればよいですか?

コード: -

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

クエリを2つのステップに単純化し、時間を比較することができます。 私はそんなことを考えています。

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試しましたか?結果を知ることは面白かったです! –