Próbuję napisać dynamiczną klauzulę where używając LINQ do zwrócenia wszystkich wierszy zawierających dowolne słowo kluczowe dostarczone w tablicy łańcuchowej. Rezultaty nie wracają zgodnie z oczekiwaniami z tego, co do tej pory miałem i patrząc na SQL, widzę problem.Tworzenie dynamicznego klauzula where dla dynamicznych słów kluczowych lub przy użyciu 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 '~')
--should być
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 '~'))
Mam nadzieję, że ktoś może mi pomóc jak spędziłem kilka godzin teraz poszukiwania rozwiązania.
góry dzięki
Co to jest problem i co to znaczy: // jak używać operatora OR dla każdego w tablicy? – MajkeloDev
Możesz chcieć rzucić okiem na wzór specyfikacji http://en.wikipedia.org/wiki/Specification_pattern. Prostą implementację wzorca można znaleźć tutaj https://github.com/pmacn/Specific –