2017-09-07 1 views
2

auf Abfragetext abhängig Ich habe eine Methode, die Suche nach Dateien. Es gibt jedoch eine Reihe von Dateien, die mit "neu" beginnen, die ich aus der Ergebnisliste entfernen möchte, aber nur, wenn die Zeichenfolge query nicht mit "neu" beginnt.Ergebnisse entfernen aus einer Linq-Abfrage

z. derzeit für die folgenden Dateien:

NewFile1 
NewFile2 
File1 
File2 

würde es zur Zeit alle 4 Ergebnisse zurück, wenn query „Datei“, aber nur die ersten beiden, wenn query war „newfile“. Was ich will ist, wenn query als "Datei" zur Verfügung gestellt wird, sollte es nur File1 & File2 in den Ergebnissen zurückgeben. Hoffe, das macht Sinn.

Ich habe folgendes versucht, aber es ist nicht die Werte entfernen:

if(!query.ToLower().Contains("new")) 
{ 
    results = results.Where(x => !x.FileName.Contains("new")); 
} 
+0

Ich glaube, Sie 'FileName' in Kleinbuchstaben vergessen. Es sollte 'x =>! X.FileName.ToLower() sein. Enthält (" new ")' – Sweeper

Antwort

1

Sie den Zustand ändern können für Ihre Anforderung zu berücksichtigen:

var lowerQuery = query.ToLower(); 
var hasNew = lowerQuery.StartsWith("new"); 
var results = files 
    .Where(f => 
     f.FileName.ToLower().Contains(lowerQuery) 
    && (hasNew || !f.FileName.ToLower().StartsWith("new")) 
    ); 

Die zusätzliche Bedingung erfordert, dass entweder FileName nicht Beginnen Sie mit "new", oder wenn dies der Fall ist, muss query auch mit "new" beginnen, damit die Datei enthalten ist.

Demo.

Verwandte Themen