是否有一种方法可以在List<Dictionary<string, object>>
中搜索非特定字符串,如SQL中的LIKE OPERATION(%)
,并返回新的List<Dictionary<string, object>>
我找到了这个东西,但它使用一个特定的字符串来搜索。在List
中搜索值例如,我有一个这样的列表字典:
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"}
},
}
如果用户要搜索字符串"john",那么他/她可以获得第一个包含"john"的列表。名字但是如果搜索字符串是"Admin",那么前两个最后一个Dictionary将返回。
实际上,这可以使用循环来实现。但是我想学习如何使用LINQ使我的代码更短。
基于您想要搜索值而不是键的事实,我认为您可以使用System来完成此操作。Linq(将其添加为using语句):
var filteredList = listOfDictionaries.Where(dictionary => dictionary.Values.Any(Value => Value.ToString().Contains(search))).ToList();
然而,作为你的字典的值类型'对象',他们总是有一个预期的字符串表示吗?
更新:
如果你想只搜索特定类型的键,你可以这样做。
var searchPair = new KeyValuePair<string, string>("Name", "searchTerm");
var filteredList = listOfDictionaries.Where(dictionary => dictionary[searchPair.Key].ToString().Contains(searchPair.Value)).ToList();