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