Domanda

Ho tre entità: EntityA, EntityB e EntityC connessi con le relazioni a-molti

.

Si veda lo schema per i dettagli:

alt text http://img706.imageshack.us/img706/9974/screenshot20091220at124.png

Per ottenere tutte le istanze di EntityA che dipendono da EntityB.name Io uso il predicato in questo modo:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY EntityB.name like 'SomeName'"];

Quello che dovrebbe essere predicato per ottenere tutte le istanze di EntityA che dipendono da EntityC.name? Ho provato domanda come @"ANY EntityB.entitiesC.name like 'SomeName'" ma ottengo un'eccezione "multiple to-many keys not allowed here".

Con i migliori saluti,

Victor

È stato utile?

Soluzione

La mia soluzione finale è quella di utilizzare sottoquery.

NSPredicate *p = [NSpredicate predicateWithFormat:@"(name like %@) AND (0 != SUBQUERY(entitiesB, $x, (0 != SUBQUERY($x.entitiesC, $y, $y.name like %@).@count)).@count)", nameA, nameC];

Purtroppo non sono riuscito a ampliare questa ricerca oggetti nsExpression.

Altri suggerimenti

Mentre ero fermato al seguente decisione:

In primo luogo, ho tutto l'EntityC che soddisfano la condizione di EntityC.name uguale a 'SomeName'

NSPredicate *p = [NSPredicate predicateWithFormat:@"name like %@", @"SomeName];

...

NSArray *res = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

Poi ho una serie di EntityB dall'alto di query

NSArray *parentBs = [res valueForKeyPath:@"@distinctUnionOfObjects.parent"];

che ottenere gamma di EntityB che soddisfano la condizione di EntityB.EntitiesC.name uguale a 'SomeName':

NSExpression *leftExpression = [NSExpression expressionForEvaluatedObject];
NSExpression *rightExpression = [NSExpression expressionForConstantValue:parentBs];

NSPredicate *p = [NSComparisonPredicate predicateWithLeftExpression:leftExpression rightExpression: rightExpression modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType options:0];

Lo ripeto lo stesso per EntityA.

L'efficacia di questa soluzione in dubbio e mi aspetto una soluzione migliore per questo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top