Sto tentando di scrivere una clausola dynamic where utilizzando LINQ per restituire tutte le righe che contengono una parola chiave fornita in un array di stringhe. I risultati non tornano come previsto con quello che ho finora e guardando l'SQL posso vedere il problema.Creazione di una clausola dynamic where per le parole chiave dinamiche o utilizzando IQueryable C# Linq
IQueryable<comments> query = _db.comments;
if (score != null)
query = query.Where(x => x.score == score);
if (dateFrom != null)3
query = query.Where(x => x.date_created >= dateFrom);
if (dateTo != null)
query = query.Where(x => x.date_created <= dateTo);
if (keywords != null)
{
//how to use OR for each in array?
foreach (var keyword in keywords)
{
var keywordCondition = keyword;
query = query.Where(x => x.text.Contains(keywordCondition));
}
}
WHERE ([Extent1].[score] = @p__linq__0)
AND ([Extent1].[date_created] >= @p__linq__1)
AND ([Extent1].[date_created] <= @p__linq__2)
AND ([Extent1].[text] LIKE @p__linq__3 ESCAPE '~')
AND ([Extent1].[text] LIKE @p__linq__4 ESCAPE '~')
--Se essere
WHERE ([Extent1].[score] = @p__linq__0)
AND ([Extent1].[date_created] >= @p__linq__1)
AND ([Extent1].[date_created] <= @p__linq__2)
AND (([Extent1].[text] LIKE @p__linq__3 ESCAPE '~')
OR ([Extent1].[text] LIKE @p__linq__4 ESCAPE '~'))
Spero che qualcuno mi può aiutare come ho trascorso un paio di ore alla ricerca di una soluzione.
Grazie in anticipo
Qual è il problema e cosa significa: // come utilizzare OR per ciascun array? – MajkeloDev
Si potrebbe voler dare un'occhiata al modello di specifica http://en.wikipedia.org/wiki/Specification_pattern. Una semplice implementazione del modello può essere trovata qui https://github.com/pmacn/Specific –