Q:

Foreach duplicando dados

Possuo 2 foreachs, para fazer uma busca de datas em ViewBags, onde eu retorno ambos em um select.
Porém para cada item do primeiro foreach, ele faz um loop completo no segundo, assim duplicando os valores, por cada item do primeiro.
Ex: Caso eu tenha 3 itens no primeiro foreach e 2 itens no segundo, meu resultado final será de 6 itens no meu select, sendo que ele repete dos dados, após o loop do primeiro.
Meu problema é: Como fazer para não repetir esses dados?
Meus Foreahcs na view:
<div class="col-md-9">
                        <select class="form-control" style="width:250px" id="selectPeriodo" name="sAquisitivo">
                            @foreach (var date in ViewBag.Ferias)
                            {
                                foreach (var fim in ViewBag.FimFerias)
                                {
                                    <option>
                                        @Convert.ToDateTime(date).ToShortDateString() à @Convert.ToDateTime(fim).ToShortDateString()
                                    </option>
                                }
                            }
                        </select>
                    </div>

Minhas ViewBags:
 ViewBag.Ferias = funcionarioFeriasRepository.Lista.Where(r => r.CdMatricula == matricula && r.SqContrato == contrato && r.DtInicioConcessao == null)
            .Select(x => x.DtInicioPeriodo).ToList();
            ViewBag.FimFerias = funcionarioFeriasRepository.Lista.Where(r => r.CdMatricula == matricula && r.SqContrato == contrato && r.DtInicioConcessao == null)
            .Select(x => x.DtFimPeriodo).ToList();

Entidade:
[DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime? dtInicioFerias { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime? dtFimFerias { get; set; }

        public string sAquisitivo { get; set; }

Resultado:

Lembrando que estou trabalhando com Foreachs, pois foi a única opção que consegui encontrar para formatar as datas par ao formato dd/MM/yyyy. Pois elas em um DropDownList não vinha formatado, mesmo usando o toString() e adicionando anotações no model.

A:

Acredito que é isto que você quer. Não vejo nenhuma razão para existir dois foreachs. Esta solução foi dada porque a viewBag foi criada de forma errada. Então ela ficaria assim:
ViewBag.Ferias = funcionarioFeriasRepository.Lista.Where(r => r.CdMatricula == matricula && r.SqContrato == contrato && r.DtInicioConcessao == null)
        .Select(x => new { Inicio = x.DtInicioPeriodo, Fim = x.DtFimPeriodo}).ToList();

Eu fiz a conversão aí mas você pode não fazer, se precisar do dado sem conversão em outro lugar. Mas em geral não é o correto, a view deve ter o mínimo de processamento possível. Então a view ficará assim:
<div class="col-md-9">
    <select class="form-control" style="width:250px" id="selectPeriodo" name="sAquisitivo">
        @foreach (var date in ViewBag.Ferias) {
            <option>
                @Convert.ToDateTime(date.Inicio).ToShortDateString() à @Convert.ToDateTime(date.Fim).ToShortDateString()
            </option>
        }
    </select>
</div>

Eu não tenho como testar, talvez você tenha que fazer alguma adaptação para funcionar mas a ideia geral é esta.

A:

Conforme colocado pelo @Maniero, a view deve ter o mínimo de processamento possível, o ideal é você simplesmente exibir o valor na view e não ficar convertendo dados etc...
Considere o código abaixo apenas caso você não consiga implementar como o @Maniero sugeriu. Porém focando no seu problema do foreach, acredito que você pode tentar montar esses valores sem duplicar as datas assim:
...
@for(int i = 0; i < ViewBag.Ferias.Count(); i++)
{
   var l = 0;
   while(l < 1)
   {
      <option>
              @Convert.ToDateTime(ViewBag.Ferias[i]).ToShortDateString() à @Convert.ToDateTime(ViewBag.FimFerias[i]).ToShortDateString()
       </option>
      l++;
   }
}
...

Edição:
Removido o parênteses de ViewBag.Ferias.Count no for.
Removido o While, eu havia inserido ele no código acima quando estava raciocinando sobre os 2 foreachs, mas ele não é necessário.
...
@for(int i = 0; i < ViewBag.Ferias.Count; i++)
{
      <option>
              @Convert.ToDateTime(ViewBag.Ferias[i]).ToShortDateString() à @Convert.ToDateTime(ViewBag.FimFerias[i]).ToShortDateString()
       </option>
}
...

