Я пытаюсь создать инструмент динамического запроса, используя System.Linq.Expressions.Expression (WPF / c # 4.0). Он работает с OData Service.
Пока все работает какПока я ограничиваю условия для встраивания опций, таких как Equal (..), GreaterThan (..) и т. д. Кажется, что нет условий в build / Like, поэтому я попытался создать свои собственные.Есть несколько статей уже там.Я попробовал Как создать System.Linq.Expressions.Expression для Like? .
Теперь, если я воспользуюсь приведенным выше решением, полученное выражение где равно
whereCallExpression = {Convert([10000]).Expand("A,B").Where(clt => MyLike(clt.LastName, "te"))}'
, что хорошо, но неправильно, поскольку не переводится в действительный запрос Odata.
Если я использую условие 'Равно', результат будет
whereCallExpression = {Convert([10000]).Expand("A,B").Where(clt => (clt.LastName == "te"))}
, что приводит кзапрос OData
results = {http://.../Clients()?$filter=LastName eq 'te'&$expand=A,B}
и работает как положено.
Я что-то не так делаю с реализацией решения или его нельзя использовать с OData?
Следует передать что-то вроде ...?$filter=substringof('te', LastName ) eq true
Любое решение о том, как это исправить?
С уважением
Андреас
PSЯ реализовал расширение решения в статическом классе, и все, что я изменил, - это имя вызываемого метода с «Like» на «MyLike». Кроме того, поскольку код, используемый для построения выражений, работает с любым из условий встраивания,Я полагаю, сейчас эта часть в порядке.Я могу разместить его части, если это необходимо