2017-09-07 42 views
2

LINQ查詢結果中刪除我有一個方法文件的搜索:從取決於查詢文本

public IActionResult FilesContainingText(string query) 
{ 
    //... 

    var results = files.Where(f => f.FileName.ToLower().Contains(query.ToLower())); 

目前這返回包含query文本的所有文件。但是,我想從結果列表中刪除一些以「新」開頭的文件,但前提是query字符串不以「新」開頭。

E.g.目前下列文件:

NewFile1 
NewFile2 
File1 
File2 

目前,它會返回所有4個結果,如果query是「文件」,但只有前兩個如果query是「newfile中」。我想要的是當query作爲「文件」提供時,它應該只返回File1 & File2的結果。希望這是有道理的。

我曾嘗試以下,但它不刪除值:

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

我想你忘了小寫'FileName'。它應該是'x =>!x.FileName.ToLower()。包含(「new」)' – Sweeper

回答

1

您可以修改條件,以考慮您的要求:

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")) 
    ); 

增加的條件要求,要麼FileName不從"new"開始,或者如果是這樣,query也必須以"new"開頭,以便包含該文件。

Demo.