Is there a shortest way to do this. Because I want to get only a certain key from dictionary
List<Dictionary<string, object> channel = DatabaseFunction.Select(some parameter);
List<string> result = new List<string>();
for (int i = 0; i < channel.Count; i )
{
result.Add(channel[i]["key"].ToString());
}
CodePudding user response:
Assuming that "key"
always exists in all Dictionary<String,Object>
objects in channel
and always has a non-null
object
reference:
List<String> result = channel
.Select( dict => dict["key"].ToString() )
.ToList();
A safer version, which skips-over dictionary elements without "key"
and/or when the inner Object
is null
would be:
List<String> result = channel
.Select( dict => ( ok: dict.TryGetValue( "key", out Object? obj ), obj ) )
.Where( t => t.ok && t.obj != null )
.Select( t => t.obj!.ToString() )
.ToList();
CodePudding user response:
You can use Select
instead of for
loop
List<Dictionary<string, object> channel = DatabaseFunction.Select(some parameter);
List<string> result = channel.Select(item => item["key"].ToString()).ToList()
You can have the key
check before adding it to the list with Where
for safety
List<Dictionary<string, object> channel = DatabaseFunction.Select(some parameter);
List<string> result = channel
.Where(dict => dict.ContainsKey("key"))
.Select(item => item["key"].ToString()).ToList()
CodePudding user response:
List<string> results = new List<string>(channel.Keys);