我正在努力应对一个容易理解的LINQ where子句。 这是我的例子:
Dictionary<string,string> test= new Dictionary<string,string>();
test.Add("12342","F650");
test.Add("12341","F000");
test.Add("12340","F650");
test.Add("12343","0E0E");
var result=test;
string searchCriteria = "F000,0E0E";
foreach (string tsearchCritera in searchCriteria.Split(','))
{
string temp = tsearchCritera;
result.Where(a=>a.Value.Equals(temp));
}
result.Select(a=>a.Key).Dump();
我希望得到结果:
12341 and 12343
相反,它返回Dictionary的所有条目。
知道如何解决这个问题只能得到两个匹配的条目吗?
答案 0 :(得分:6)
.Where()
不会作为就地收集过滤器;它只对集合应用过滤器,期望您在枚举集合时解析下游查询(例如使用.Select()
或.ToList()
),在过程中应用过滤器 查询的解析。
您需要返回.Where()
的结果并使用该新结果来选择匹配的键。
Dictionary<string, string> test = new Dictionary<string, string>();
test.Add("12342", "F650");
test.Add("12341", "F000");
test.Add("12340", "F650");
test.Add("12343", "0E0E");
var result = test;
var filteredResults = new List<KeyValuePair<string, string>>();
string searchCriteria = "F000,0E0E";
foreach (string tsearchCritera in searchCriteria.Split(','))
{
string temp = tsearchCritera;
filteredResults.AddRange(result.Where(a => a.Value.Equals(temp)));
}
filteredResults.Select(a => a.Key).Dump();