Left join query of user profiles
It doesn't feel right, because you have a lot of repetitive code.

Notice how each property selector's where statement contains

        where objectiveIds.Contains(winner.ObjectiveID)
        where winner.Active
        where winner.UserID == up.UserID


That means you can refactor this where condition to a join in the containing query.

Also, you specify an order by clause, when you are only using the values to get the Count().  This does nothing but take up space and time.

I think this query might be more along the line of what you are trying to achieve:

        var rankingDtos = 
                    from user in MetaData.UserProfile
                    let userWinners = from winner in MetaData.Winner
                                      let objectives = from objective in MetaData.Objective
                                                       where winner.ObjectiveID == objective.ObjectiveID
                                                       select objective
                                      where winner.UserID == user.UserID &amp;&amp; winner.Active
                                      orderby winner.CreatedOn descending
                                      select new
                                                 {
                                                     Winner = winner,
                                                     Objectives = objectives
                                                 }
                    select new RankingDTO
                               {
                                   UserId = user.UserID,
                                   FirstName = user.FirstName,
                                   LastName = user.LastName,
                                   LastWinnerDate = userWinners.First().Winner.CreatedOn,
                                   WinnerCount = userWinners.Count(x =&gt; objectiveIds.Contains(x.Winner.ObjectiveID)),
                                   Video1 = userWinners.Count(x =&gt; x.Objectives.Any(o =&gt; o.ObjectiveNm == Constants.Promotions.SecVideo1)),
                                   Quiz1 = userWinners.Count(x =&gt; x.Objectives.Any(o =&gt; o.ObjectiveNm == Constants.Promotions.SecQuiz1))
                               };