Это - общий вопрос, но здесь является конкретным случаем, которого я ищу решение:
У меня есть a 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?
Вы можете использовать Func
:
public int GetResult(Func<KeyValuePair<int, List<string>>, bool> filter)
{
return (from x in Dictionary
where filter(x)
select x.Key).FirstOrDefault();
}
Или альтернативно: Predicate
. Я думаю, что Func
, представленный в .NET 3.5, в наши дни является предпочтительным .
Вы используете x
для обозначения двух разных вещей в вашем последнем примере, и это приведет к ошибке компиляции. Попробуйте изменить один из x
на другой:
x = GetResult(y => y.Value.Contains("Test1"));