C# Linq,其中不过滤值

C# Linq,其中不过滤值,c#,linq,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 sear

我正在与一个据说很简单的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();
相反,它返回字典中的所有条目

您知道如何解决此问题以仅获取两个匹配的条目吗?

。其中()
不充当就地收集过滤器;它仅对集合应用筛选器,并期望您在枚举集合时(例如使用
.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();
字典测试=新建字典();
测试。添加(“12342”、“F650”);
测试。添加(“12341”、“F000”);
测试。添加(“12340”、“F650”);
测试。添加(“12343”、“0E0E”);
var结果=测试;
var filteredResults=新列表();
字符串searchCriteria=“F000,0E0E”;
foreach(searchCriteria.Split(',')中的字符串tsearchCritera)
{
字符串温度=TsarchCritera;
filteredResults.AddRange(result.Where(a=>a.Value.Equals(temp));
}
Select(a=>a.Key.Dump();
。其中()
不作为就地收集过滤器;它仅对集合应用筛选器,并期望您在枚举集合时(例如使用
.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();
字典测试=新建字典();
测试。添加(“12342”、“F650”);
测试。添加(“12341”、“F000”);
测试。添加(“12340”、“F650”);
测试。添加(“12343”、“0E0E”);
var结果=测试;
var filteredResults=新列表();
字符串searchCriteria=“F000,0E0E”;
foreach(searchCriteria.Split(',')中的字符串tsearchCritera)
{
字符串温度=TsarchCritera;
filteredResults.AddRange(result.Where(a=>a.Value.Equals(temp));
}
Select(a=>a.Key.Dump();

result=result.Where(a=>a.Value.Equals(temp))
result.Where(a=>a.Value.Equals(temp))你没有对这个的返回做任何事情。Linq是功能设计的:一切都返回一个值,而不是操纵源代码。这种类型的编码不太容易出错。
result=result.Where(a=>a.Value.Equals(temp))
result.Where(a=>a.Value.Equals(temp))你没有对这个的返回做任何事情。Linq是功能设计的:一切都返回一个值,而不是操纵源代码。这种类型的编码不太容易出错。Select()不枚举集合。查询的实际执行被延迟,直到您在foreach语句中迭代查询变量。要强制立即执行任何查询并缓存其结果,可以调用ToList或ToArray方法。在一定范围内(Count、Max、Average和First)执行聚合函数的查询不需要显式foreach。有关它的详细信息,请参见-。Select()不枚举集合。查询的实际执行被延迟,直到您在foreach语句中迭代查询变量。要强制立即执行任何查询并缓存其结果,可以调用ToList或ToArray方法。在一定范围内(Count、Max、Average和First)执行聚合函数的查询不需要显式foreach。详情请参阅-