2011-01-17 21 views
0

Ich arbeite mit einer Sammlung von DateTime mit allen Daten von Datum A bis Datum B. Ich werde eine Zeichenfolge übergeben, die wie 1234567 aussieht, 1 ist Sonntag, 2 ist dienstag, usw.Eine Reihe von Daten mit einer Reihe von Tagen filtern

Nun stelle ich möchte meine Daten Sammlung filtern eine Zeichenkette mit der obigen Konfiguration verwenden und wir bekommen die Zeichenfolge 1.004.007, was bedeutet, wir unsere Datetime-Kollektion filtern müssen werden nur Termine haben, die an einem Sonntag stattfinden , an einem Mittwoch und Samstag.

Wie kann ich die ganze Zeichenfolge lesen, herausfinden, an welchen Tagen ich filtern werde und dann meine Sammlung dynamisch nach diesen Wochentagen filtern?

Antwort

2

Geben Sie diesen einen Schuss:

List<DateTime> dates = ...; 
string filter = "1004007"; 

List<DateTime> filteredDates = dates.Where(d => 
    filter.Contains(((int)d.DayOfWeek + 1).ToString())).ToList(); 

Oder, wenn Sie möchten, können Sie zuerst eine Liste von Tagen erstellen, die Ihr Filter sind, anstatt nur die Funktion String.Contains zu verwenden. Wenn Sie Ihre Liste der Daten sehr groß ist, bis diese Arbeit tun Front könnte Leistung helfen:

List<DateTime> dates = ...; 
string filter = "1004007"; 
var daysOfWeek = filter.Distinct().Where(c => c != '0') 
         .Select(c => (DayOfWeek)(int.Parse(c.ToString()) - 1)) 

List<DateTime> filteredDates = (from d in dates 
           join dw in daysOfWeek on d.DayOfWeek equals dw 
           select d).ToList(); 
+0

Danke für Ihre Antwort, es ist ziemlich vollständig und erklärt die Lösung gut. – Hallaghan

1

umrechnen Tag der Woche auf eine ganze Zahl, dann eine Zeichenfolge und Verwendung enthält, um zu sehen, ob es in der Eingabezeichenfolge ist:

string days = "1004007"; 
var result = datetimes 
    .Where(dt => days.Contains(((int)dt.DayOfWeek + 1).ToString())); 
+0

Es tut mir leid, aber ich verstehe nicht, wie kann ich Schleife durch die Zeichenfolge, die sagt, was Tage der Woche sind wir Filtern durch, um den Datumsbereich zu filtern. – Hallaghan

+0

@Hallaghan: Sie müssen die Zeichenfolge nicht durchlaufen. Enthält das für Sie. –

+0

Also erkennt es tatsächlich diese Zahlen als Tage innerhalb der enthält und filtert die Daten von ihnen? – Hallaghan