在 List<Dictionary<string, object>> 中搜索值,但使用非特定字符串
Search for a value in List<Dictionary<string, object>> but using a non specific string
有没有办法在 List<Dictionary<string, object>>
中搜索非特定字符串,例如 SQL 中的 LIKE OPERATION(%)
和 return 新的 List<Dictionary<string, object>>
我找到了这个东西,但是它使用特定的字符串来搜索。
Search for a value in List<Dictionary<string, object>>
例如,我有一个这样的列表字典:
List<Dictionary<string, object>> userList = new List<Dictionary<string, object>>(){
new Dictionary<string, object>() {
{"Id", 1},
{"Name", "John"}
},
new Dictionary<string, object>() {
{"Id", 2},
{"Name", "Foo"}
},
new Dictionary<string, object>() {
{"Id", 3},
{"Name", "Admin"}
},
new Dictionary<string, object>() {
{"Id", 4},
{"Name", "AdminAccount"}
},
}
如果用户想搜索一个字符串“Jo”,那么he/she可以得到名字为“John”的第一个列表。但是如果搜索字符串是“Admin”,那么前两个最后一个字典将 return.
实际上,这是可以使用循环实现的。但是我想学习如何使用 LINQ 来缩短我的代码。
基于你想搜索值而不是键的事实,我认为你可以使用 System.Linq 来做到这一点(将其添加为 using 语句):
var filteredList = listOfDictionaries.Where(dictionary => dictionary.Values.Any(Value => Value.ToString().Contains(search))).ToList();
但是,由于您的字典具有 'object' 类型的值,它们是否始终具有预期的字符串表示形式?
更新:
如果您只想搜索特定类型的键,您可以这样做。
var searchPair = new KeyValuePair<string, string>("Name", "searchTerm");
var filteredList = listOfDictionaries.Where(dictionary => dictionary[searchPair.Key].ToString().Contains(searchPair.Value)).ToList();
有没有办法在 List<Dictionary<string, object>>
中搜索非特定字符串,例如 SQL 中的 LIKE OPERATION(%)
和 return 新的 List<Dictionary<string, object>>
我找到了这个东西,但是它使用特定的字符串来搜索。 Search for a value in List<Dictionary<string, object>>
例如,我有一个这样的列表字典:
List<Dictionary<string, object>> userList = new List<Dictionary<string, object>>(){
new Dictionary<string, object>() {
{"Id", 1},
{"Name", "John"}
},
new Dictionary<string, object>() {
{"Id", 2},
{"Name", "Foo"}
},
new Dictionary<string, object>() {
{"Id", 3},
{"Name", "Admin"}
},
new Dictionary<string, object>() {
{"Id", 4},
{"Name", "AdminAccount"}
},
}
如果用户想搜索一个字符串“Jo”,那么he/she可以得到名字为“John”的第一个列表。但是如果搜索字符串是“Admin”,那么前两个最后一个字典将 return.
实际上,这是可以使用循环实现的。但是我想学习如何使用 LINQ 来缩短我的代码。
基于你想搜索值而不是键的事实,我认为你可以使用 System.Linq 来做到这一点(将其添加为 using 语句):
var filteredList = listOfDictionaries.Where(dictionary => dictionary.Values.Any(Value => Value.ToString().Contains(search))).ToList();
但是,由于您的字典具有 'object' 类型的值,它们是否始终具有预期的字符串表示形式?
更新:
如果您只想搜索特定类型的键,您可以这样做。
var searchPair = new KeyValuePair<string, string>("Name", "searchTerm");
var filteredList = listOfDictionaries.Where(dictionary => dictionary[searchPair.Key].ToString().Contains(searchPair.Value)).ToList();