2

我制作了一个自动完成框,它根据用户在 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将包含输入中的所有单词?提前致谢!

4

2 回答 2

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));
于 2013-09-26T12:18:49.527 回答
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

于 2017-03-13T12:54:06.937 回答