public async Task <List <SearchedSelectionModel> > Handle(SearchSelectionQuery request, CancellationToken cancellationToken) { List <SearchedSelectionModel> result = new List <SearchedSelectionModel>(); List <SearchedPosition> Positions = new List <SearchedPosition>(); if (request.PositionId != null) { Positions = await _mediator.Send(new SearchPositionQuery() { Id = request.PositionId }); } else { Positions = await _mediator.Send(new SearchPositionQuery() { OrganoGramId = request.OrganoGramId }); } if (request.Id != null) { SearchedSelectionModel Record = await(from Selection in _context.Selection join Person in _context.Person on Selection.PersonId equals Person.Id into Persons from PersonResult in Persons.DefaultIfEmpty() join P in Positions on Selection.PositionId equals P.Id into PositionsList from PositionResult in PositionsList.DefaultIfEmpty() where Selection.PositionId == PositionResult.Id select new SearchedSelectionModel { PersonName = PersonResult.FirstName + " " + PersonResult.LastName, SelectionId = Selection.Id, Id = Selection.Id, EffectiveDate = Selection.EffectiveDate, EventTypeId = Selection.EventTypeId, Remarks = Selection.Remarks, FinalNo = Selection.FinalNo, QadamID = Selection.QadamID, VerdictDate = Selection.VerdictDate, VerdictRegNo = Selection.VerdictRegNo, PersonId = Selection.PersonId, NodeId = Convert.ToInt32(PositionResult.Id), PositionId = Convert.ToInt32(PositionResult.Id), ParentNodeId = Convert.ToInt32(PositionResult.ParentId), OrganogramId = Convert.ToInt32(PositionResult.OrganoGramId), WorkAreaText = PositionResult.WorkAreaText, PositionTypeText = PositionResult.PositionTypeText, RankText = PositionResult.RankText, OrgUnitText = PositionResult.OrgUnitText, Sorter = PositionResult.Sorter, Code = PositionResult.Code, LocationText = PositionResult.LocationText, DepartmentID = Selection.DepartmentID, Title = PositionResult.PositionTypeText + " " + PositionResult.WorkAreaText }).SingleOrDefaultAsync(cancellationToken); result.Add(Record); } else { foreach (SearchedPosition P in Positions) { SearchedSelectionModel Record = new SearchedSelectionModel(); if (_context.Selection.Any(c => c.PositionId == P.Id)) { Record = await(from Selection in _context.Selection join Person in _context.Person on Selection.PersonId equals Person.Id into Persons from PersonResult in Persons.DefaultIfEmpty() where Selection.PositionId == P.Id select new SearchedSelectionModel { PersonName = PersonResult.FirstName + " " + PersonResult.LastName, SelectionId = Selection.Id, Id = Selection.Id, EffectiveDate = Selection.EffectiveDate, EventTypeId = Selection.EventTypeId, Remarks = Selection.Remarks, FinalNo = Selection.FinalNo, VerdictDate = Selection.VerdictDate, VerdictRegNo = Selection.VerdictRegNo, PersonId = Selection.PersonId, DepartmentID = Selection.DepartmentID }).SingleOrDefaultAsync(cancellationToken); } Record.NodeId = Convert.ToInt32(P.Id); Record.PositionId = Convert.ToInt32(P.Id); Record.ParentNodeId = Convert.ToInt32(P.ParentId); Record.OrganogramId = Convert.ToInt32(P.OrganoGramId); Record.WorkAreaText = P.WorkAreaText; Record.PositionTypeText = P.PositionTypeText; Record.RankText = P.RankText; Record.OrgUnitText = P.OrgUnitText; Record.Sorter = P.Sorter; Record.Code = P.Code; Record.RankText = P.RankText; Record.LocationText = P.LocationText; Record.Title = P.PositionTypeText + " " + P.WorkAreaText; result.Add(Record); } } return(result); }