2010-08-03 14 views
8

Ésta es una pregunta general, pero aquí es el caso específico que estoy buscando una solución a:método con el predicado como parámetro

Tengo un Dictionary<int, List<string>> quiero aplicar diversos predicados a. Quiero un método que puede cuidar de múltiples consultas LINQ como éstas:

from x in Dictionary 
where x.Value.Contains("Test") 
select x.Key 

from x in Dictionary 
where x.Value.Contains("Test2") 
select x.Key 

Así que estoy buscando un método de este modo:

public int GetResult(**WhatGoesHere** filter) 
{ 
    return from x in Dictionary.Where(filter) 
      select x.Key; 
} 

Para ser utilizado de esta manera:

int result; 

result = GetResult(x => x.Value.Contains("Test")); 
result = GetResult(x => x.Value.Contains("Test2")); 

¿Cuál es la sintaxis correcta para WhatGoesHere?

+0

Woops, Eché de menos el tipo correcto. Borré mi respuesta La respuesta de Mark Byer es buena. – zneak

Respuesta

14

Puede utilizar 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(); 
} 

O, alternativamente: Predicate<KeyValuePair<int, List<string>>>. Creo que Func que se introdujo en .NET 3.5 es preferred en estos días.

Está utilizando x para significar dos cosas diferentes en su ejemplo final y esto dará un error de compilación. Intente cambiar uno de los x a algo más:

x = GetResult(y => y.Value.Contains("Test1")); 
+0

Ah, pensé que estaba en el camino correcto. Estaba haciendo Predicate >> pero supongo que no tendría mucho sentido. Gracias. – Ocelot20

Cuestiones relacionadas