Ho una query LINQ che è composta da un oggetto anonimo.Costruire dinamicamente "o" query LIKE in LINQ su SQL
A un certo punto, voglio limitare i risultati per parametri di ricerca in entrata, ma questo può essere uno o più parametri, e voglio eseguire un "MI PIACE O MI PIACE O LIKE" usando quelli.
Nel codice, sarebbe simile a questa:
reservations = reservations.Where(r =>
r.GuestLastName.Contains(parameter1) || r.GuestFirstName.Contains(parameter1) ||
r.GuestLastName.Contains(parameter2) || r.GuestFirstName.Contains(parameter2) ||
// Parameter 3, 4, 5,..
);
Come avrei potuto costruire questo in modo dinamico, sapendo che reservations
è del tipo IQueryable<'a> (anonymous object)
? Ho dato un'occhiata alle varie risorse e posso solo trovare il modo di farlo quando conosco il tipo, non quando uso i tipi anonimi.
E 'importante sapere che si tratta di LINQ to SQL, quindi dovrebbe essere tradotto in una query SQL e non essere filtrati in memoria ...
Questa soluzione richiede il passaggio di espressioni lambda alla firma della funzione. Per quanto ho capito la tua domanda, la tua esigenza era di costruirli dinamicamente. Ad esempio, considera un'azione invocata come risultato di una richiesta GET nell'ambiente WEB. Nei parametri di query i nomi delle proprietà da filtrare vengono inviati al server, insieme ai loro possibili valori. Nel tuo caso, sei costretto a costruire espressioni lambda basate sui nomi di proprietà che hai ricevuto dal client, invece di limitarti a passare alla funzione filtro. – jwaliszko