我有一个包含如下数据的列表:
Name | LName
------------
John| Snow
Raymond | Redington
....
我可以用下面的代码在每一列中搜索
list.ShapeView().Where(p =>
(p.Name.IndexOf(autoBox.Text, StringComparison.OrdinalIgnoreCase) != -1) ||
(p.LName.IndexOf(autoBox.Text, StringComparison.OrdinalIgnoreCase) != -1)).Apply();
如果我输入以下文本,结果将被正确过滤
但是如果我同时输入它们
不会显示任何结果,我该如何实现?
答案 0 :(得分:2)
您想支持什么并不是 100% 清楚。如果您还希望 TextBox.Text
的一部分必须包含在 Name
或 LName
中,那么这应该可行:
var query = list.ShapeView()
.Where(p => autoBox.Text.IndexOf(p.Name, StringComparison.OrdinalIgnoreCase) != -1
|| autoBox.Text.IndexOf(p.LName, StringComparison.OrdinalIgnoreCase) != -1
|| p.Name.IndexOf(autoBox.Text, StringComparison.OrdinalIgnoreCase) != -1
|| p.LName.IndexOf(autoBox.Text, StringComparison.OrdinalIgnoreCase) != -1);
您还可以按空格拆分并在 name
中搜索第一个标记,在 lname
中搜索第二个标记。但这也坏了,如果有人输入“John Lee Hooker”怎么办?什么是名字,什么是姓氏?所以你应该有两个文本框。
答案 1 :(得分:1)
您可以将 Split
应用于文本并使用 function Contains
示例:
string[] valores = autoBox.Text.ToUpper().Split(' ');
var query = list.ShapeView()
.Where(p =>valores.Contains(p.Name.ToUpper())||valores.Contains(p.LName.ToUpper()));