所以我有返回IReadOnlyCollection<object>
的函数
IReadOnlyCollection<object> calc = GetAll();
在此calc
中,我有string, object
的词典,因此当我想基于某些value
搜索某些Key
时:
foreach (var item in calc)
{
Dictionary<string, object> t= (Dictionary<string, object>)item;
var id = t.First(x => x.Key == "MyKey").Value.ToString();
}
但是我进入了foreach
循环。
是否有没有任何Loop
的情况? (例如,如果我想获得N
个结果)?
答案 0 :(得分:2)
如果要获取calc
中所有词典中“ MyKey”条目的所有值,可以这样做:
var ids = calc.OfType<Dictionary<string,object>>() // get all dictionaries
.SelectMany(d => d.Where(x => x.Key == "MyKey")) // get all KeyValuePairs with a key "MyKey"
.Select(x => x.Value.ToString()) // get the values as string
.ToList(); // make it a list
这将产生一个List<string>
。
如果只需要N
个结果,请使用Take()
:
var ids = calc.OfType<Dictionary<string,object>>() // get all dictionaries
.SelectMany(d => d.Where(x => x.Key == "MyKey")) // get all KeyValuePairs with a key "MyKey"
.Select(x => x.Value.ToString()) // get the values as string
.Take(N) // take only first N values
.ToList(); // make it a list
答案 1 :(得分:0)
您可以为此使用 linq 扩展方法,使用 Where()过滤元素,然后使用 Take()前N个过滤。{{ 3}}是MSDN文章。顺便说一句,不需要选择第一个键,字典始终只有一个键,您可以将最后一行重写为
var id = t["MyKey"].ToString();