2012-07-10 8 views
11

Estoy desarrollando una aplicación en la que obtengo algunos datos de la red en una clase. clase esCómo buscar una cadena en clase en C#

public class Detail 
{ 
     public string name { get; set; } 
     public List<Education> education { get; set; } 
     public City city { get; set; } 
     public List<Work> work { get; set; } 
} 

public class Education 
{ 
     public string DegreeName { get; set; } 
} 

public class City 
    { 
     public string name { get; set; } 
    } 
public class Work 
    { 
     public string name { get; set; } 
    } 

Los datos se almacenan para una persona en la clase anterior.

ahora quiero buscar una cadena decir q=" Which Manager Graduated From USA ?"

Así que yo quiero que la búsqueda de la consulta anterior ...

Sobre la base de la cantidad de palabras coincidentes, quiero dar el nombre de usuario . Entonces, ¿busca una persona si es un gerente graduado de Estados Unidos? (puede ser menos palabras, para la búsqueda como un Directora de la India)

El enfoque que estoy tratando de buscar palabras como Gestor en Work y graduado en Education y Ubicación de USA

Estoy creando una matriz de cadena de búsqueda

string[] qList = q.Split(' '); 

y luego atraviesa la clase. Pero no tengo idea de cómo buscar (eficientemente) datos en la clase.

¿Y mi enfoque es lo suficientemente bueno para buscar o hay alguna otra opción mejor?

+0

¿Puede decirnos qué propiedades hay en los objetos de Educación, Ciudad y Trabajo? –

+0

bien, el punto es qué interfaz le proporciona al asker y cómo sabe qué término debe buscarse en qué propiedad? – tschmit007

+0

¿Qué tan específico puede esperar que sean sus cadenas 'q'? ¿Las cadenas siempre estarán en esa sintaxis? Es decir, ¿siempre buscarás a una persona cuyo 'Trabajo' contenga la segunda palabra como arriba? También creo que quisiste decir algo más parecido a "Graduado en 'Educación' y Estados Unidos en' Ciudad'. No veo un campo 'Ubicación' en tu clase' Detail'. –

Respuesta

2

Lo que está desarrollando es un lenguaje de consulta legible y humano. Comenzar con una secuencia de cadenas puede ser, bueno, comenzar, pero imagine las posibilidades de búsqueda: Busque personas en una ciudad o en una variedad de ciudades, busque personas que trabajen para una de las 500 mejores empresas o en un determinado campo.

Para este propósito, debe desarrollar un lenguaje de consulta. Con una gramática fácil de cambiar y documentada. Eche un vistazo al ANTLR un generador de analizadores que funciona bien con C# /. NET.

+4

Creo que un mejor consejo sería para él ** no ** para desarrollar un lenguaje de consulta. –

+0

Desarrollar un lenguaje de consulta lingüística atractivo es definitivamente una larga tarea en vivo :) – saintedlama

+0

@MichaelGraczyk ¿Cómo hace este sitio de compras para hacer su búsqueda ... no es similar? – Man8Blue

0

Si tiene una serie de campos que usted SABE que existirán, como Educación y Trabajo, recomendaría tener una serie de sinónimos y palabras relacionadas para cada campo.

Por lo tanto, para la Educación, usted podría tener una lista de palabras como esto:

Graduate, University, School, Learning, Taught e.t.c 

hacer algo como esto?

Obviamente, no podrá hacer coincidir CADA palabra, pero ¿valdría la pena intentarlo?

O podría intentar incluir etiquetas en cada campo, en lugar de palabras. Entonces, en lugar de que ellos pongan "Me gradué de la Universidad", tienes un campo de Educación, y luego un subcampo de la Universidad, donde ponen el nombre.

Todo se trata de limitar los errores, teniendo en cuenta que los humanos pueden cometer millones de errores que NO se pueden resolver programáticamente.

2

Me preocupa de alguna manera el mecanismo que está intentando implementar, si los tipos de usuario q=" Manager Graduated From USA ?" significan que no pone la palabra 'which' en él, entonces tendrá que ir al lenguaje de consulta como ANTLR como se sugiere.

Mi recomendación es dar listas desplegables al usuario, primero debe contener valores de Propiedad de trabajo, 2º debe contener valores de educación y un cuadro de texto para ingresar a la Ciudad.

Después de pasar estos valores a su método, utilizar LINQ para obtener los datos de su colección como:

var filteredResults = from result in YOURDETAILCOLLECTION 
         where result.city.Contains(YOURCITYTEXTBOXVALUE) 
         select result; 

Puede buscar el mecanismo, cómo where en LINQ en un List.

+0

Este parece ser el enfoque más sensato hasta ahora. – JcMaltaDev

+0

no se puede proporcionar un menú desplegable ... no está en el prototipo ... – Man8Blue

+0

Si tiene que usar un cuadro de texto único, en la información sobre herramientas del cuadro de texto o use JQuery para marcar el texto, y decirle al usuario que primero entre en Trabajo que un espacio que la educación y que un espacio y proporcionar ciudad. –

1

Si es posible, intente indexar sus datos usando Lucene .NET o una tecnología de búsqueda similar, como Solr o ElasticSearch. Estas tecnologías están optimizadas para la búsqueda y le brindan muchas opciones para mejorar la clasificación de sus resultados. Puede responder fácilmente a la pregunta en su publicación inicial y es muy rápido. Sería muy difícil implementar esta funcionalidad por su cuenta.