私は2つのエンティティ、Person
とTransaction
があるとします。NSExpressionはサブクエリを尊重しますNSPredicate
Person
はTransaction
とTransaction
エンティティと対多の関係がamount
とdate
を持っています。私の目標はPerson
に基づいてNSFetchRequest
でしたが、特定の日付と取引金額のSUM
との取引がある人のみを知りたいと思っています。
のように私のコードが見えます:
だから、SELECT t0.ZPERSONID, t0.ZNAME,
(SELECT TOTAL(t2.ZAMOUNT) FROM ZTRANSACTION t2 WHERE (t0.Z_PK = t2.ZPERSON))
FROM ZPERSON t0
WHERE (SELECT COUNT(t1.Z_PK) FROM ZTRANSACTION t1 WHERE (t0.Z_PK = t1.ZPERSON AND ((t1.ZDATE >= ? AND t1.ZDATE <= ?)))) > ?
、それはNSExpression
ようだ:すべては、私はSQLクエリを見たときに生成、それがどのように見える細かいようだが...
NSExpression *amountKeyPath = [NSExpression expressionForKeyPath:@"transactions.amount"];
NSExpression *sumAmountExpression = [NSExpression expressionForFunction:@"sum:" arguments:@[amountKeyPath]];
// Create the expression description for that expression.
NSExpressionDescription *description = [[NSExpressionDescription alloc] init];
[description setName:@"sum"];
[description setExpression:sumAmountExpression];
[description setExpressionResultType:NSDecimalAttributeType];
// Create the sum amount fetch request,
self.sumAmountFetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
self.sumAmountFetchRequest.resultType = NSDictionaryResultType;
self.sumAmountFetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(transactions, $t, $t.date >= %@ AND $t.date <= %@)[email protected] > 0", self.startDate, self.endDate];
self.sumAmountFetchRequest.propertiesToFetch = @[@"name", description];
宣言された、fetchRequestのNSPredicate
を尊重しません。
式をfetchRequestに付加された述語にも適用できますか?あるいは、NSExpression
がそれ自身で立っているので、私はそれに別の述語を付けるべきですか?
SQLiteの文は私にはよさそうでしょう。述語は最後の "WHERE"に変換され、文全体に適用されます。期待した結果が得られますか? –
いいえ、私はその人に属するトランザクションの量を得ました(時間枠に限定されません - WHERE句) – Rpranata
OK、今、私はあなたが意味することを理解し、上記のコメントは間違っています。 –