在LINQ中使用String.Split()和Contains()?

时间:2013-09-26 12:14:33

标签: c# linq jquery-autocomplete

我已经创建了一个自动完成框,根据TextBox中的用户输入显示项目列表,每次用户在文本框中键入字符时调用以下方法,然后返回具有匹配字词的项目列表:

internal readonly ObjectSet<T> _set; //database data
public IEnumerable<IOrganization> GetOrganizations(string Input, int max)
{
    return this._set.Where(e.name.Contains(Input)).Take(max).ToList();

}

数据库数据看起来像一个包含组织名称的目录:

name
------
Organization #20
Clinic of some type #22
another clinic bla bla

一切正常。但现在我想返回name包含用户输入的每个单词的项目列表。 例如,如果我的name看起来像这样:Republic organization #23 和用户输入:repu org 此名称应位于返回的列表中。 我想我应该将用户输入分成单词数组,然后检查Contains()每个单词:

string[] terms = input.Split(' ');

如何一次检查terms中的每个项目,以便我的name包含输入中的所有字词? 提前谢谢!

2 个答案:

答案 0 :(得分:3)

您可以通过在All谓词中嵌套terms谓词(迭代Where集合)来实现此目的(迭代_set):

return this._set.Where(e => terms.All(t => e.name.Contains(t)));

更简洁:

return this._set.Where(e => terms.All(e.name.Contains));

答案 1 :(得分:0)

回答的代码给了我错误,所以这对我有用

terms.Contains(e.name) || e.name.Contains(terms)

我认为我的错误是因为我的案例中的“条款”是RadTextBox 这是我的错误

Failure: Execution of 'System.Linq.Enumerable:All(IEnumerable1,Func2)' on the database server side currently not implemented