0

別のエンティティ OrderItemOption と対多関係にある Core Data エンティティ OrderItem があります。2 つの特定の OrderItemOptions と関係がある特定の OrderItem を見つけたいと考えています。Core Data でそれを行うにはどうすればよいですか?

OrderItemOptions にはタイプコードとオプションコードがあり、基本的にはキー/値です。オプション (typecode=OptionSet1、optionCode=BT) と別のオプション (typecode=OptionSet2、optionCode=CT) を持つ orderItem を探しています。

問題は、クエリで最初の OrderItemOption オブジェクトと 2 番目のオブジェクトを区別する方法です。

やりたいことを正確に実行するための SQL クエリを思いつくことができました。エイリアスを使用して、テーブルをそれ自体と結合します。Core Data で同等のことを行うにはどうすればよいですか?

SQL ステートメントは次のとおりです。

 select * from zorderItem, zorderItemOption one, zorderItemOption two where 
 one.zorderitem = zorderItem.z_pk and 
 one.zoptiontypecode='OptionSet1' and one.zoptioncode='BT' and 
 two.zorderitem =zorderitem.z_pk and
 two.zoptiontypecode='OptionSet2' and two.zoptioncode='CT';

述語の「ANY」キーワードの背後にあるセマンティクスに完全に従っているとは思いません。親しくなることができた、

NSPredicate *pre = [NSPredicate predicateWithFormat:
            @"order == %@ and 
            (any options.optionTypeCode == %@ and any options.optionCode == %@)
            and 
            (any options.optionTypeCode == %@ and any options.optionCode == %@)",
            order, @"OptionSet1", @"BT", @"OptionSet2", @"CT"];

しかし、optionCodes が逆になった場合にも一致しました。

各括弧式の外で「ANY」を因数分解しようとしましたが、解析例外が発生しました。

おそらく、より単純な例も興味深いでしょう。Books との対多関係を持つ Author エンティティがある場合はどうなるでしょうか。「Book1」というタイトルの本と「Book2」というタイトルの本の両方を書いた著者を見つける、という述語を作成するにはどうすればよいでしょうか。

4

1 に答える 1

0

誰かが Apple 開発者フォーラムで回答しましたhttps://devforums.apple.com/message/659752#659752

ここでの繰り返し投稿、

あなたが探しているのはサブクエリのようです。サブクエリの説明の 1 つ: http://funwithobjc.tumblr.com/post/2726166818/what-the-heck-is-subquery

のようなものになると思います

order == %@ AND
subquery(orderItemOptions, $one, $one.typeCode = %@ && $one.optionCode = %@).@count >0 AND
subquery(orderItemOptions, $two, $two.typeCode = %@ && $two.optionCode = %@).@count >0

述語のために。なぜ order == %@ 句を試みたのかはわかりませんが、一貫性を保つためにサブクエリを使用してバージョンに保持しました...

于 2012-05-11T19:16:03.633 に答える