2016-11-01 18 views
0

レルムXamarin LINQクエリから返された「列」を制限する方法はありますか?レルムXamarin LINQ選択

たとえば、Customer RealmObjectがあり、すべての顧客名のリストが必要な場合は、All<Customer>をクエリして名前リストを作成する必要がありますか?それは面倒で非効率的です。私はドキュメントで何も見ていない。私はここで何かを見逃していますか?ありがとう!

+0

名前だけを選択しても効果がありませんか? – Marco

答えて

1

レルムはオブジェクトベースのストアであることを覚えておく必要があります。 SqliteのようなRDBMSでは、戻り値を "レコード"の "列"のサブセットに制限するのは理にかなっていますが、オブジェクトストアでは、元のクラスから属性を削除して、これらの新しいクラスをオブジェクトとしてインスタンス化します。

は、このようにあなたがこれを行うことができ、顧客の名前を表す文字列のリストだけをしたいです:

List<string> names = theRealm.All<Customer>().ToList().Select(customer => customer.Name).ToList(); 

注:あなたがList最初からRealm.All<>結果を取り、その後、LINQのを使用してSelect「フィルタ」は、必要なプロパティだけです。現在RealmResults.Selectを使用することは現在サポートされていません(​​)。

あなたが一致POCOを持っていると仮定すると、元RealObjectからの属性のサブセットである複合型を返すために必要がある場合は、あなたが使用することができます:あなたがRealmResultを変換したら

var custNames = theRealm.All<Customer>().ToList().Select((Customer c) => new Name() { firstName = c.firstName, lastName = c.lastName }); 

は、覚えておいてくださいあなたは生命RealmObjectを使用して失うPOCOsの静的リスト。

個人的に私は

...レルムは RealmResultので、 RealObject Sを使用して直接、新しいリストに次のものが必要POCOS毎回にそれらを変換し、その後、時間とメモリのオーバーヘッドを処理する上で、より効率的であるほど高速で可能な限りこれを行うことを避けます
+0

これを踏まえて、realmオブジェクトのプロパティのサブセットを取得するシナリオはほとんどありません(サーバーへの送信または連結された文字列の作成については想像しています)。ほとんどの場合、 'All 'が返すように、完全な 'Customer'オブジェクトを使用することができ、パフォーマンス上の影響はありません。 –

+0

@NikolaIrinchev完全に合意し、連結文字列の場合、連結を実行する 'RealmObject'内の' [Ignored] 'タグ付きreadonlyプロパティを使用して、FirstNameとLastNameを変換すると、First +文字列またはPOCOの 'List'への最後の名前.... – SushiHangover