-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
?
-
0
-
1183
-
Needed
Problem
I would like to sort a list based on linked properties. Would that be possible?
I have seen a possibly related issue for Realm Java #672, and which appeared to be resolved in PR #3834 in 2017. However, I don't see information in the documentation on how sorting on linked properties would workout.
In my case, I would like to sort a list of{{Item}}s, in which each item has a one-to-many relationship with FieldValue. The sorting, however, should be performed on a property in a single FieldValue.
In pure Dart I would do it like this:
Unable to find source-code formatter for language: dart. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
import 'package:collection/collection.dart'; part 'main.g.dart'; @RealmModel() class _Item { @MapTo('_id') @PrimaryKey() late ObjectId id; late List<_FieldValue> fieldValues = const []; } @RealmModel() class _FieldValue { late _FieldProperty? fieldProperty; late String? textValue; } @RealmModel() class _FieldProperty { @MapTo('_id') @PrimaryKey() late ObjectId id; String name = ""; } void main(List<String> arguments) { final realm = Realm(Configuration.local([ FieldValue.schema, FieldProperty.schema, Item.schema, ])); final field = FieldProperty(ObjectId(), name: "text"); final unsortedItems = [ Item(ObjectId(), fieldValues: [FieldValue(ObjectId(), textValue: "a", fieldProperty: field)]), Item(ObjectId(), fieldValues: [FieldValue(ObjectId(), textValue: "d", fieldProperty: field)]), Item(ObjectId(), fieldValues: [FieldValue(ObjectId(), textValue: "c", fieldProperty: field)]), Item(ObjectId(), fieldValues: [FieldValue(ObjectId(), fieldProperty: field)]), Item(ObjectId(), fieldValues: [FieldValue(ObjectId(), textValue: "b", fieldProperty: field)]) ]; realm.write(() { realm.add(field); realm.addAll(unsortedItems); }); var unsortedTextValues = unsortedItems .map((item) => (item.fieldValues .firstWhereOrNull((element) => element.fieldProperty == field) ?.textValue ?? "")) .join(", "); print(unsortedTextValues); // a, d, c, , b // Sort items var sortedItems = unsortedItems.sorted((a, b) => (a.fieldValues .firstWhereOrNull((element) => element.fieldProperty == field) ?.textValue ?? "") .compareTo((b.fieldValues.firstWhereOrNull( (element) => element.fieldProperty == field))?.textValue ?? "")); var sortedTextValues = sortedItems .map((item) => (item.fieldValues .firstWhereOrNull((element) => element.fieldProperty == field) ?.textValue ?? "")) .join(", "); print(sortedTextValues); // , a, b, c, d Realm.shutdown(); }
Is this also possible with Realm Query Language?
Solution
No response
Alternatives
No response
How important is this improvement for you?
Would be a major improvement
Feature would mainly be used with
Local Database only