Я использую службу Odata v4 с использованием прокси-класса генератора кода Odata.Создание динамических запросов с использованием ParameterExpression в Odata Client
MetroContext = new MetroContainer(new Uri(@"http://localhost:56222/service"));
IQueryable<Patient> query = MetroContext.Patients;
query = query.Where(x => x.FirstName == "john");
Над кодом работает нормально. Но мне нужно строить запросы динамически. Так что я попытался следующее:
MetroContext = new MetroContainer(new Uri(@"http://localhost:56222/service"));
IQueryable<Patient> query = MetroContext.Patients;
ParameterExpression pe = Expression.Parameter(typeof(Patient), "patient");
Expression left = Expression.Property(pe, "FirstName");
Expression right = Expression.Constant("john");
Expression predicateBody = Expression.Equal(left, right);
query = query.Provider.CreateQuery<Patient>(predicateBody);
Когда я запускаю программу, я получаю сообщение об ошибке:
Ошибка перевод выражения Linq к URI: Бинарный оператор «Равно» не поддерживается.
- Почему я получаю эту ошибку и как я могу решить эту проблему?
- Как создать динамические запросы путем объединения таких методов, как
Contains()
,StartsWith()
?
спасибо, это прекрасно работает. Еще один вопрос: могу ли я использовать сравнение «Equal», «GreaterThan» в методе «Expression.Call()»? – Rahul
№ 'Call' для методов. Но, конечно, вы можете использовать 'Equal',' GreaterThan' и т. Д. В аргументах метода (для условий). У вас есть конкретный пример? –
Могу ли я заменить код 'Expression.NotEqual (слева, справа)' на что-то вроде 'Expression.Call (left," NotEqual ", null, right)'? – Rahul