Допустим, у меня есть три Сущности. Человек: название адрес (для многих-зарплаты) и (для-многих-ссуд)

Заработная плата: доход налог Отн .: (для одного человека)

Bills amount Rel: (to-one-person)

Как выполнить выборку с таким результатом:

Джон Доу, СУММ> доход, СУММ> сумма Eva Doe, SUM> доход, SUM> сумма

Использование Swift

Ответы (1)

Это, вероятно, легче всего сделать, используя «операторы сбора» кодирования ключевого значения (см. здесь), а не выборку. На каждого человек:

let name = person.name
let totalIncome = person.valueForKeyPath("salary.@sum.income")
let totalLoans = person.valueForKeyPath("loans.@sum.amount")

Если производительность является проблемой, вы можете улучшить ситуацию, изменив запрос на выборку (для объектов Person), чтобы «предварительно выбрать» связанные объекты Salary и Bills:

fetchRequest.relationshipKeyPathsForPrefetching = ["salary", "loans"]

В качестве альтернативы можно получить всю необходимую информацию за одну выборку, хотя я не рекомендую это, потому что это требует изменения fetchRequest для возврата массива словарей, а не массива NSManagedObjects. Это затрудняет последующую обработку (например, заполнение представления таблицы).

// Define NSExpression and NSExpressionDescription for the total income
let incomeED = NSExpressionDescription()
incomeED.expression = NSExpression(forKeyPath: "salary.@sum.income")
incomeED.name = "totalIncome"
incomeED.expressionResultType = .Integer64AttributeType
// Define NSExpression and NSExpressionDescription for the total amount
let amtED = NSExpressionDescription()
amtED.expression = NSExpression(forKeyPath: "loans.@sum.amount")
amtED.name = "totalLoans"
amtED.expressionResultType = .Integer64AttributeType
// specify attributes and expressions to fetch
fetchRequest.propertiesToFetch = ["name", incomeED, amtED]
// specify dictionary return type (required to process NSExpressions)
fetchRequest.resultType = .DictionaryResultType

Результатом выборки будет массив словарей; каждый словарь будет иметь ключи «name», «totalIncome» и «totalLoans» (с соответствующими значениями).

2022 WebDevInsider