Как я могу сделать предикат с этим? - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть языковая сущность, которая хранит текст и код языка, с которым она идет.Мне нужно получить список всего текста для языка, который выбрал пользователь, если только конкретная строка текста не доступна на этом языке, и в этом случае мне нужно получить версию на английском языке.

MyТаблица, в основном, выглядит следующим образом, в терминах SQL:

DECLARE TABLE Languages
(
    textId int,
    languageCode char(2),
    text varchar(2000)
)

С обоими textId и languageCode в качестве моего первичного ключа.

В SQL я бы в основном сделал это:

SELECT ISNULL(l.text, e.text)
FROM
    (SELECT * FROM Languages WHERE languageCode = 'en') t
    LEFT JOIN
    (SELECT * FROM Languages WHERE languageCode = @selectedLanguage) l
    ON l.textId = t.textId

Это должно дать мне ровно 1 кусок текста для каждого textId;используя английский, если не удается найти selectedLanguage.

Можно ли сделать что-то подобное, используя NSPredicate и FetchedResultsController?Я нашел немного информации о ключевом слове SUBQUERY, но никакого реального объяснения того, как использовать его с NSPredicate, нет.

1 Ответ

0 голосов
/ 07 апреля 2011

Хорошо, поэтому я смог сделать это по-другому и намного проще ...

[NSPredicate predicateWithFormat:
    @"language.languageCode == %@ OR
    (language.languageCode = 'en' AND NOT (question IN %@))", languageCode, foundLanguages]

Где foundLanguages ​​- это массив всего текста, который у меня есть на выбранном языке. Требуется дополнительный запрос на выборку, чтобы получить список всего текста для выбранного языка, но он возвращает именно то, что нужно. Гораздо проще, чем использовать левое соединение и подзапросы, как я думал в SQL. Вероятно, менее эффективный, хотя.

...