在 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();