(Wcześniejsze pytanie, Recursively (?) compose LINQ predicates into a single predicate, jest podobne do tego, ale faktycznie zadałem złe pytanie ... rozwiązanie tam spełniło postawione pytanie, ale tak naprawdę nie jest muszę są one różne, choć Honest)Skomponuj predykaty LINQ-SQL do jednego predykatu
Biorąc pod uwagę następujący tekst wyszukiwania:...
"keyword1 keyword2 ... keywordN"
Chcę skończyć z następującym SQL:
SELECT [columns] FROM Customer
WHERE (
Customer.Forenames LIKE '%keyword1%'
OR
Customer.Forenames LIKE '%keyword2%'
OR
...
OR
Customer.Forenames LIKE '%keywordN%'
) AND (
Customer.Surname LIKE '%keyword1%'
OR
Customer.Surname LIKE '%keyword2%'
OR
....
OR
Customer.Surname LIKE '%keywordN%'
)
W efekcie dzielimy szukany tekst na spacje, przycinamy każdy token, konstruujemy wieloczęściową klauzulę OR na podstawie każdego z nich, a następnie łączymy klauzule AND.
Robię to w Linq-SQL i nie mam pojęcia, jak dynamicznie komponować predykat oparty na arbitralnie długiej liście podprogowych. Dla znanej liczby klauzul łatwo ręcznie komponować orzeczniki:
dataContext.Customers.Where(
(
Customer.Forenames.Contains("keyword1")
||
Customer.Forenames.Contains("keyword2")
) && (
Customer.Surname.Contains("keyword1")
||
Customer.Surname.Contains("keyword2")
)
);
Krótko mówiąc, potrzebna jest techniką, która, podawana dwa orzeczniki powróci jeden orzeczenie tworzenia dwa źródła predykaty z operatorem dostarczonych ale ograniczone do operatorów wyraźnie obsługiwanych przez Linq-SQL. Jakieś pomysły?
To może być duplikat : http://stackoverflow.com/questions/180405/how-do-you-add-dynamic-where-clauses-to-a-linq-query – devuxer
Twoje zapytanie nie ma sensu ... Chcesz znaleźć klientów, gdzie * Imię * zawiera co najmniej jedno z wyszukiwanych haseł, a * Nazwisko * zawiera co najmniej jedno z wyszukiwanych haseł itp.? Czy zapytanie nie powinno znaleźć klientów, którzy mają * wszystkie * wyszukiwane hasła, ale w polu * dowolne *? – Timwi