私はRavenDBを初めて使用しますが、Any()LINQクエリを正しく機能させるのはイライラします。私のドキュメントは次のようになります。
{
"Key": "BKey",
"Text": "B Key",
"IsLocal": false,
"Category": null,
"_destroy": false,
"Translations": [
{
"CultureCode": "es-ES",
"Text": null
},
{
"CultureCode": "ja-JP",
"Text": "Hello"
}
]
}
次のクエリで、「es-ES」の翻訳がないすべてのエントリが表示されると思います。
var nonTranslatedEntries =
_docs.Query<ResourceEntry>().Where( e => e.Translations == null || e.Translations.Count == 0 || !e.Translations.Any(t => t.CultureCode == "es-ES" && t.Text != null))
ただし、これは機能していません。指定されたCultureCodeの翻訳が存在する場合でも、エントリが返されます。translations配列内にアイテムが1つしかない場合に機能します。しかし、translations配列内に複数のアイテムがあるとすぐに、クエリは機能しなくなります。
別の解決策として、私は次のことを試みました。
var translatedEntries = from re in _docs.Query<ResourceEntry>()
where re.Translations.Any(t => t.CultureCode == cultureCode && t.Text != null)
select new {Id = re.Id};
var translatedIds = translatedEntries.ToList().Select(e => e.Id).ToList();
var nonTranslatedEntries =
_docs.Query<ResourceEntry>().Where(e => !e.Id.In(translatedEntryIds));
しかし、それは空のリストを戻すだけです。
どんな助けでも大歓迎です。
ありがとう、
ニザール