Royaume pour. Net ne prend pas directement en charge le Distinct
de Linq.
Set Opérateurs
Distinct, Union, Intersection, et à l'exception ne sont pas pris en charge.
re: https://realm.io/docs/xamarin/latest/api/linqsupport.html
Vous pouvez prendre le IRealmCollection
à une liste (ToList
) puis effectuer une Linq Distinct sur le résultat.
En supposant que ce modèle:
public class ARealmClass : RealmObject
{
public int Key { get; set; }
public string KeyString { get; set; }
}
Vous avez besoin d'un IEqualityComparer
. Ceci est un exemple rapide qui compare une seule propriété KeyString
de ARealmClass
:
public class ARealmClassKeyStringComparer : IEqualityComparer<ARealmClass>
{
public bool Equals(ARealmClass x, ARealmClass y)
{
return (x.KeyString == y.KeyString);
}
public int GetHashCode(ARealmClass obj)
{
if (ReferenceEquals(obj, null)) return 0;
return obj.Key.GetHashCode();
}
}
Ensuite, votre royaume et requête Linq:
var queryResults = realm.All<ARealmClass>().ToList().Distinct(new ARealmClassKeyStringComparer());
L'inconvénient est ce matérialise toute la collection des ARealmClass
objets afin de prendre à une liste et effectuer l'opération distincte. Si possible Where
filtrez le All<ARealmClass>()
à un sous-ensemble avant d'appliquer ToList
.