Linq哪里没有过滤值

时间:2016-07-05 15:04:44

标签: c# linq

我正在努力应对一个容易理解的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的所有条目。

知道如何解决这个问题只能得到两个匹配的条目吗?

1 个答案:

答案 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();