Как сделать сложный запрос на выборку в Core data - PullRequest
0 голосов
/ 27 июня 2018

Я реализовал данные Core для хранения в моем приложении. Мне нужно выполнить сложные выборки, используя FetchRequest и предикат, как показано ниже SQLite запрос:

SELECT
  diagnosis_drug.drug_id,
  diagnosis_drug.weight_bracket_id,
  score,
  localscore,
  (score + localscore) AS score,
  drug.*
FROM diagnosis_drug
INNER JOIN drug
  ON diagnosis_drug.drug_id = drug.id
WHERE diagnosis_drug.doctor_id = 3
AND diagnosis_id IN (29, 212)
AND score > 0
AND weight_bracket_id = 1
AND diagnosis_drug._d = 0
ORDER BY score DESC

здесь Diagnostic_drug & drug являются сущностями, а другие являются атрибутами.

Entity : Diagnosis_drug
Attributes : 
diagnosisId - Int32
doctorId - Int32
drugId - Int32
score - Int32
localScore - Int32

Entity : Drug.
Attributes :
id : Int32
dosage : Int32
volume : Int32
genericName : String
formulation : String
doseType : String
duration : Int32
name : String

Атрибут "id" препарата равен атрибуту "drugId" Diagnosis_drug. Запрос состоит в том, чтобы получить лекарства с наибольшим количеством баллов от Diagnosis_drug, и внутреннее объединение сделано для объекта Drug, чтобы получить его детали.

1 Ответ

0 голосов
/ 28 июня 2018

Итак, я обнаружил, что есть несколько ограничений для основных данных. Вы можете выполнить fetchrequest для двух разных сущностей, только когда они имеют отношение между ними. а именно если у вас есть отношение один к одному между Person (entity_1) и его мобильным телефоном (entity_2), для получения обоих нам необходимо выполнить выборку для объекта Person. Чтобы установить фильтр для Person, мы добавим предикат, как нам нужно, и для установки фильтра на мобильный телефон, мы поставим «SUBQUERY» для атрибутов мобильного телефона в том же предикате. Если две сущности не имеют отношения, есть обходной путь. Вы делаете эти две сущности суб-сущностью новой родительской сущности и выполняете выборку для новой родительской сущности ( См. Ссылку !). Тем не менее, это оставляет нас в случаях, когда у этих двух сущностей уже есть некоторые другие Родители! Здесь нет ни отношения, ни общего родительского объекта. Итак, вот ограничение основных данных. Вам нужно будет выполнить выборку для обоих таких объектов отдельно. Также базовые выборки данных не допускают вычислений внутри предикатов запросов (вам нужно будет поддерживать дополнительную переменную в вашей сущности и обновлять ее каждый раз, когда вам нужно). Любые исправления в моих выводах приветствуются. Спасибо.

...