Per un sito Web che sto utilizzando, stiamo utilizzando LINQ alle entità. Sono stato incaricato di aggiungere funzionalità di ricerca al sito. Sto cercando di capire il modo più elegante per cercare più parole chiave (utente inserito) su un singolo campo nel database. Permettetemi di fare un esempio.LINQ alle entità Ricerca di proprietà del testo per più parole chiave
colonne della tabella:
Name, Description
Esempio fila:
"Cookie monster", "Fluffy, likes cookies and blue"
ricerca utente (delimitatore non importa):
"blue fluffy"
Attualmente sto usando il seguente:
public List<SesameCharacters> SearchByKeywords(string keywords)
{
List<SesameCharacters> output = new List<SesameCharacters>();
string[] k = keywords.ToLower().Split(' ');
using (SesameStreet_Entities entities = new SesameStreet_Entities())
{
IQueryable<SesameCharacters> filter = entities.SesameCharacters;
foreach (string keyword in k)
filter = ForceFilter(filter, keyword);
output = filter.ToList();
}
return output;
}
private IQueryable<SesameCharacters> ForceFilter(IQueryable<SesameCharacters> filter, string keyword)
{
return filter.Where(p => p.Description.ToLower().Contains(keyword));
}
Attualmente funziona come previsto ma immagino che non sia la soluzione migliore al problema. Mi manca qualcosa di evidentemente ovvio?
NOTA: Corrispondenza AND
.
strano, una risposta era qui, ho votato in su, poi giù perché pensavo che fosse sbagliato, poi è andato a votare di nuovo perché era giusto, ora è andato. – jfar
Sì, c'era una risposta da parte di CasperOne ma qualcuno doveva averlo rimosso. Ha suggerito l'utilizzo di un proc memorizzato, che è ciò che si sta inclinando in questo momento. –
Sono nella stessa situazione ... Hai trovato una soluzione con LinqToEntities o hai finito con l'utilizzo di una stored procedure? – Kjensen