C# 如何实施";获取或创建;Xamarin的领域查询?
考虑一下简单的模型:C# 如何实施";获取或创建;Xamarin的领域查询?,c#,xamarin,realm,realm-net,C#,Xamarin,Realm,Realm Net,考虑一下简单的模型: public class Session : RealmObject { [ObjectId] public string UserId { get; set; } public string Token { get; set; } } 如何按ID获取会话实例,或者如果不存在null var realm = Realm.GetInstance (); var q = realm.All<Session> ().Where ((x) =&
public class Session : RealmObject
{
[ObjectId]
public string UserId { get; set; }
public string Token { get; set; }
}
如何按ID获取会话
实例,或者如果不存在null
var realm = Realm.GetInstance ();
var q = realm.All<Session> ().Where ((x) => x.UserId = "1");
// This won't work if no session is saved:
// var session = q.First ();
// and this won't either
// var session = q.FirstOrDefault ();
// And this is mmm... kind of strange but it's working :)
var session = q.Count() > 0 ? q.First() : null;
var realm=realm.GetInstance();
var q=realm.All(),其中((x)=>x.UserId=“1”);
//如果未保存任何会话,则此操作将不起作用:
//var session=q.First();
//这也不会
//var session=q.FirstOrDefault();
//这是嗯。。。有点奇怪,但它起作用了:)
var session=q.Count()>0?q、 First():null;
那么,设计应该如何完成呢?您想做的是:
var localSession = theRealm.All<Session>().FirstOrDefault((Session session) => session.UserId == "1");
尝试/捕获无效操作异常
:
sessionlocalsession=null;
尝试
{
localSession=theRealm.All().First((Session Session)=>Session.UserId==“1”);
}
捕获(InvalidOperationException错误)(错误消息==“序列不包含匹配元素”)
{
theRealm.Write(()=>
{
localSession=newsession(){UserId=“1”,Token=“SO”};
});
}
D.WriteLine($“{localSession?.UserId}:{localSession?.Token}”);
您想做的是:
var localSession = theRealm.All<Session>().FirstOrDefault((Session session) => session.UserId == "1");
尝试/捕获无效操作异常
:
sessionlocalsession=null;
尝试
{
localSession=theRealm.All().First((Session Session)=>Session.UserId==“1”);
}
捕获(InvalidOperationException错误)(错误消息==“序列不包含匹配元素”)
{
theRealm.Write(()=>
{
localSession=newsession(){UserId=“1”,Token=“SO”};
});
}
D.WriteLine($“{localSession?.UserId}:{localSession?.Token}”);
更新
支持var localSession=theRealm.All().FirstOrDefault(session=>session.UserId==“1”)代码>已在0.78.0版及以上版本中提供
原创
我现在正在做相关的工作
请在此处添加您希望支持的特定场景的注释
请注意,如果您想在正式NuGet发布之前尝试一些东西,我们现在也有了一个新的解决方案。更新
支持var localSession=theRealm.All().FirstOrDefault(session=>session.UserId==“1”)代码>已在0.78.0版及以上版本中提供
原创
我现在正在做相关的工作
请在此处添加您希望支持的特定场景的注释
请注意,如果您想在正式的NuGet发布之前尝试一些东西,我们现在也有了一个解决方案。try/catch
方法对我来说似乎很自然,因为FirstOrDefault
还不受支持:)但我不确定这在.NET编程中是否是一个好的实践?如果您抛出并我们经常这样做,但是假设一旦你为用户建立了一个“会话”,比如说每次应用程序运行一次,就不会有过度使用的情况,因为你的会话已经存在,所以你永远不会解开堆栈。。。。这取决于您的偏好,因为在获得更好的ling支持之前,这确实是一个权宜之计。try/catch
方法对我来说似乎很自然,因为FirstOrDefault
还不受支持:)但我不确定这在.NET编程中是否是一个好的做法?如果您在我们经常这样做,但是假设一旦你为用户建立了一个“会话”,比如说每次应用程序运行一次,就不会有过度使用的情况,因为你的会话已经存在,所以你永远不会解开堆栈。。。。这取决于您的偏好,因为在获得更好的ling支持之前,这确实是一个权宜之计。
Session localSession = null;
try
{
localSession = theRealm.All<Session>().First((Session session) => session.UserId == "1");
}
catch (InvalidOperationException error) when (error.Message == "Sequence contains no matching element")
{
theRealm.Write(() =>
{
localSession = new Session() { UserId = "1", Token = "SO" };
});
}
D.WriteLine($"{localSession?.UserId}:{localSession?.Token}");