根据查询文本从linq查询中删除结果

时间:2017-09-07 16:35:02

标签: c# linq

我有搜索文件的方法:

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

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

这将返回包含query文本的所有文件。但是,有许多文件以" new"开头。我想从结果列表中删除,但仅当query字符串不以" new"开头时。

E.g。目前用于以下文件:

NewFile1
NewFile2
File1
File2

如果query是"文件",它将返回所有4个结果,但如果query是" newfile"则仅返回前两个结果。我想要的是query被提供为"文件"它应该只返回File1&结果中的File2。希望这是有道理的。

我尝试过以下内容,但不删除值:

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

1 个答案:

答案 0 :(得分:1)

您可以修改条件以满足您的要求:

TestKapow

添加的条件要求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.