如何在Realm中使用不同的查询Xamarin

问题描述:

我正在寻找一种方法来从我的Realm数据库中只选择不同的值。在java中,唯一值返回这样的 -如何在Realm中使用不同的查询Xamarin

RealmResults<Person> unique = realm.where(Person.class).distinct("name"); 

但是,我不能找到一种方法,Xamarin(.NET)做相同的境界。

这是使用LINQ查询支持不同的或不实的问题....

在STANDAR LINQ查询其不支持,但你可以使用一些额外的组件来获得支持它>MoreLINQ

,如果你尝试写你赢了查询其没有太大的困难

public static IEnumerable<TSource> DistinctBy<TSource, TKey> 
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) 
{ 
    HashSet<TKey> seenKeys = new HashSet<TKey>(); 
    foreach (TSource element in source) 
    { 
     if (seenKeys.Add(keySelector(element))) 
     { 
      yield return element; 
     } 
    } 
} 


var query = people.DistinctBy(p => p.Id); 

希望这是你的预期

及的境界。 Net不直接支持Linq的Distinct

集合运算符

鲜明,联合,交叉,除了不支持。

重:https://realm.io/docs/xamarin/latest/api/linqsupport.html

您可以乘坐IRealmCollection到列表(ToList),然后执行一个LINQ鲜明的结果。

假设这种模式:

public class ARealmClass : RealmObject 
{ 
    public int Key { get; set; } 
    public string KeyString { get; set; } 
} 

你需要一个IEqualityComparer。这是一个简单的例子来比较单一属性KeyStringARealmClass的:

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(); 
    } 
} 

那么你的境界和LINQ查询:

var queryResults = realm.All<ARealmClass>().ToList().Distinct(new ARealmClassKeyStringComparer()); 

缺点是这种物化ARealmClass对象的整个集合,以便采取他们列表并执行独特的操作。如果可能的话,Where在应用ToList之前将All<ARealmClass>()过滤为子集。