private void GetVMatrix(SqlExp <Matrix> sqlMain) { //sqlMain => //{ //main select sqlMain.Select(p => p.Id); sqlMain.Select(p => p.Name); sqlMain.Select(p => p.Code); sqlMain.Select(p => p.WordLength); sqlMain.Select(p => p.SyncWord1); sqlMain.Select(p => p.SyncWord2); sqlMain.Select(p => p.SyncWord3); sqlMain.Select(p => p.SyncWord4); sqlMain.Select(p => p.FrameCounterStartWith); sqlMain.Select(p => p.Activated); sqlMain.Select(p => p.IsDeleted); sqlMain.Select(p => p.OriginalData); sqlMain.Select(p => p.Description); sqlMain.Select(p => p.CreatedTime); sqlMain.Select(p => p.LastUpdatedTime); //sub query parameter indo var sqlInfo = sqlMain.JoinSubQuery <VEParametersInfo, string>(sql => { //sub query parameter child var sqlchild = sql.JoinSubQuery <VEParameterChild, string>(sql2 => { sql2.Select(p => p.ParameterId); sql2.Count <VEParameterChild>(p => p.Id, v => v.Frequency); sql2.Where(v => v.PartIndex == 1); sql2.GroupBy(p => p.ParameterId); }, p => p.ParameterId, v => v.ParameterId, JoinType.InnerJoin); //selection and other sql.Select(p => p.MatrixId); sql.Count <VEParametersInfo>(p => p.Id, v => v.ParameterCount); sql.MaxSubQuery <VEParameterChild>(sqlchild, p => p.Frequency, v => v.MaxFrequency); sql.GroupBy(p => p.MatrixId); }, p => p.Id, v => v.MatrixId, JoinType.LeftOuterJoin); sqlMain.SelectSubQuery <VMatrix>(sqlInfo, p => p.ParameterCount, p => p.MaxFrequency); //sub query r aircraft _matrix var sqlAir = sqlMain.JoinSubQuery <RelationAircraftMatrix, string>(sql => { sql.Select(p => p.MatrixCode); sql.Count <VMatrix>(v => v.Id, p => p.RelationAircraftCount); sql.Where(p => p.IsDeleted == false); sql.GroupBy(p => p.MatrixCode); }, p => p.Code, v => v.MatrixCode, JoinType.LeftOuterJoin); sqlMain.SelectSubQuery <VMatrix>(sqlAir, v => v.RelationAircraftCount); //subquery decode process var sqlDecode = sqlMain.JoinSubQuery <DecodeProcess, string>(sql => { sql.Select(p => p.MatrixCode); sql.Count <VMatrix>(p => p.Id, v => v.DecodeTimes); sql.Max <VMatrix>(p => p.CreatedTime, v => v.LastUsageDate); sql.GroupBy(p => p.MatrixCode); }, p => p.Code, v => v.MatrixCode, JoinType.LeftOuterJoin); sqlMain.SelectSubQuery <VMatrix>(sqlDecode, v => v.DecodeTimes, v => v.LastUsageDate); //}; }