public AnalysedVote(Vote vote, IList <Vote> allVotes, IList <string> validTicketNumbers, IList <AppInsightsVotingUser> userSessions) { var orderedIndices = vote.GetIndices().Select(int.Parse).OrderBy(x => x).ToArray(); var indexGaps = orderedIndices.Select((index, i) => i == 0 ? 0 : index - orderedIndices[i - 1]).Skip(1).OrderBy(x => x).ToArray(); Vote = vote; HasTicketNumber = !string.IsNullOrEmpty(vote.TicketNumber); HasValidTicketNumber = HasTicketNumber && validTicketNumbers.Contains(vote.TicketNumber); HasDuplicateTicketNumber = HasValidTicketNumber && allVotes.Any(v => v.VoteId != vote.VoteId && v.TicketNumber == vote.TicketNumber); HasAppInsightsId = !string.IsNullOrEmpty(vote.VoterSessionId); HasValidAppInsightsId = HasAppInsightsId && userSessions.Any(x => x.UserId == vote.VoterSessionId && x.VoteId == vote.VoteId); HasDuplicateAppInsightsId = HasAppInsightsId && allVotes.Any(v => v.VoteId != vote.VoteId && v.VoterSessionId == vote.VoterSessionId); IndexGaps = JsonConvert.SerializeObject(indexGaps.ToArray()); }