2016-07-28 6 views
1

Ich versuche, den Namen des Monats und das Jahr mit LINQ aus einer Liste mit 2 Eigenschaften abrufen, ohne den Namen der Monate und des Jahres zu wiederholen.Monat Name und Jahr aus der Liste

public class Record 
{ 
    public int Id { get; set; } 
    public DateTime Date { get; set; } 
} 

DateTime d1 = new DateTime(2015, 1, 14); 
DateTime d2 = new DateTime(2016, 3, 12); 
DateTime d3 = new DateTime(2016, 4, 17); 
DateTime d4 = new DateTime(2015, 5, 19); 
DateTime d5 = new DateTime(2016, 6, 10); 

List<Record> dates = new List<Record> 
{ 
    new Record { Id= 1, Date = d1 }, 
    new Record { Id= 2, Date = d2 }, 
    new Record { Id= 3, Date = d3 }, 
    new Record { Id= 4, Date = d4 }, 
    new Record { Id= 5, Date = d5 } 
}; 

//Month should be in string format (January,June, etc) 
// Get Year and Months from that list withour repeating the names 
//List<string> months = 
//List <string> years = 

Antwort

2

Mit einem Verlängerungsverfahren vereinfachen es (aus here):

static class DateTimeExtensions 
{ 
    public static string ToMonthName(this DateTime dateTime) 
    { 
     return CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dateTime.Month); 
    } 
} 

Sie dies tun können:

var months = dates.Select(r => r.Date.ToMonthName()) 
    .Distinct(); 

var years = dates.Select(r => r.Date.Year) 
    .Distinct(); 

Bitte beachte, dass ich Jahre als int hier gegeben haben, Wenn Sie Zeichenfolgen benötigen, fügen Sie einfach ToString() hinzu.

4

Seit Monaten und mit Linq:

List<string> years = dates.Select(d => d.Date.Year.ToString()) 
          .Distinct() 
          .ToArray(); 

Obwohl es unklar ist:

List<string> months = dates.Select(d => d.Date.ToString("MMMM")) 
          .Distinct() 
          .ToArray(); 

Informationen zum ToStirng Format für die Monatsnamen können auf MSDN here.

und seit Jahren finden Wie Sie die Liste der Jahre aussehen möchten.

Informationen zu Distinct finden Sie unter MSDN here.