NaVeN Kumar Ответов: 0

Запрос ODATA: как фильтровать записи основной таблицы на основе данных дочерней таблицы


Привет,

Я хотел бы отфильтровать записи на основе данных дочерней таблицы с помощью запроса odata. Пример у меня есть таблицы, как показано ниже. Employee содержит empId и имя, EmployeeText имеет empId, languageid и текст

Работники
Название Empid В
1 Тест
2 Тест2

EmployeeText
текст empId LanguageId
1 1 Тест
1 2 Тестирование
2 1 Условие_2
2 2 Французский Условие_2

Im использует webapi с OData и Entity framework

Я вызываю метод webapi со стороны клиента с помощью http. Мне нужно получить подробную информацию на основе текста, который я дал в качестве входных данных. Например, если я даю ввод как Французский Тест затем он должен вернуть результат, как показано ниже. Означает, что на основе текста текстовой таблицы он должен возвращать записи основной таблицы.

Мой API имеет код, как показано ниже

public IQueryable< employee & gt; GetEmployee()
{
возвращаемое значение DataContext.Человек();
}

Что я уже пробовал:

Я попробовал запрос, как показано ниже, но он фильтрует только дочерние записи, когда мы подали заявку на дочернюю таблицу. Не знаю, как с этим справиться. Ребята, вы не могли бы мне помочь?

значение localhost:12345/службы/сотрудников?$расширения(EmployeeText($фильтр=текст экв 'тестирование'))

Я получил результаты, как показано ниже:
{
  "empId": 1,
  "Text" : "Test",
  "EmployeeText":[
   {
     "empId":1,
     "LanguageId":2,
     "Text": "French Test"
   },
  ]
},
{
  "empId": 2,
  "Text" : "Test",
  "EmployeeText":[]
}

Мой результат должен быть таким, как показано ниже
{
  "empId": 1,
  "Text" : "Test",
  "EmployeeText":[
   {
     "empId":1,
     "LanguageId":2,
     "Text": "French Test"
   },
  ]
}

Пожалуйста, дайте мне знать, если я не совсем ясно выразился.

Заранее спасибо!!

Graeme_Grant

Какой исходный код? Какие результаты вы видите? Есть какие-нибудь ошибки?

Отсюда мы не можем видеть ваш экран. Пожалуйста, нажмите виджет" улучшить вопрос " и обновите свой вопрос. Если вы не знаете, как это сделать, пожалуйста, прочтите это: Как улучшить мой вопрос - код проекта FAQ[^]

NaVeN Kumar

Извиняюсь. Я обновил вопрос. Пожалуйста, дайте мне знать, если я не совсем ясно выразился.

Graeme_Grant

Вы показываете только клиентскую сторону... Вся тяжелая работа лежит на стороне сервера.

Вы установили точку останова на стороне сервера и прошли через код, чтобы увидеть, что он делает? Видит ли сервер запрос, который вы делаете? Ожидает ли ваш код обязательных полей? Правильно ли настроена ваша маршрутизация?

Пожалуйста, перечитайте мой первоначальный пост.

Richard Deeming

А вы пробовали:

localhost:12345/odata/employees?$filter=Employee/EmployeeText/Text eq 'French Test'

URI Conventions (OData версии 2.0) / 4.5. Filter System Query Option ($filter)[^]

0 Ответов