这是一个普遍的问题,但这是我正在寻找解决方案的具体案例:
我有一个Dictionary<int, List<string>>
我想应用各种谓词。我想要一个可以处理多个LINQ查询的方法,例如:
from x in Dictionary
where x.Value.Contains("Test")
select x.Key
from x in Dictionary
where x.Value.Contains("Test2")
select x.Key
所以我正在寻找一个像这样的方法:
public int GetResult(**WhatGoesHere** filter)
{
return from x in Dictionary.Where(filter)
select x.Key;
}
如此使用:
int result;
result = GetResult(x => x.Value.Contains("Test"));
result = GetResult(x => x.Value.Contains("Test2"));
WhatGoesHere 的正确语法是什么?
答案 0 :(得分:15)
您可以使用Func<KeyValuePair<int, List<string>>, bool>
:
public int GetResult(Func<KeyValuePair<int, List<string>>, bool> filter)
{
return (from x in Dictionary
where filter(x)
select x.Key).FirstOrDefault();
}
或者:Predicate<KeyValuePair<int, List<string>>>
。我认为.NET 3.5中引入的Func
目前是preferred。
您在最后一个示例中使用x
表示两个不同的内容,这会产生编译错误。尝试将其中一个x
更改为其他内容:
x = GetResult(y => y.Value.Contains("Test1"));