我已经创建了一个自动完成框,根据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
包含输入中的所有字词?
提前谢谢!
答案 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(IEnumerable
1,Func
2)' on the database server side currently not implemented