遇到了问题。我的java问题有一个解决方案:
realm.where(Foo.class).in("id", ids).findAll();
它在 id 列表中查找数据库中类 foo 的所有元素ids
我不得不写一个拐杖:
public interface IKeyedEntity
{
string Id { get; set; }
}
public class RealmServiceWrapper<T> where T: RealmObject, IKeyedEntity
{
public List<T> Get(List<string> ids)
{
return _db.Realm.All<T>().Where(a => ids.Contains(a.Id)).ToList();
}
}
但它仍然不起作用,因为您不能将构造与领域一起使用.Where(a => ids.Contains(a.Id))
:
System.NotSupportedException:'方法'包含'不受支持'
.in()
所以问题本身就是:夏普有没有替代方案?
这本质上
Where(a => ids.Contains(a.Id))
与 相同Where(a => a.Id == ids[0] || a.Id == ids[1] || ...)
,因此您可以编写一个扩展方法来“手动”收集这样的表达式:与将过滤条件设置为字符串相比,这种方法有几个优点:首先,不需要花费资源将字符串解析为表达式树,我们已经有了树,其次,编译器会检查这样的一个属性已经真正存在(不允许被密封)并将添加类型,即 不会有额外的打包/解包和字符串与数字的无意义比较等。
使用示例:
这使我有可能做这样的事情: