0

単純なモデルを考えてみましょう:

public class Session : RealmObject
{
    [ObjectId]
    public string UserId { get; set; }
    public string Token { get; set; }
}

SessionID でインスタンスを取得する方法、またはインスタンス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;

では、どのように設計されているのでしょうか?

4

2 に答える 2

2

あなたがしたいことは次のとおりです。

var localSession = theRealm.All<Session>().FirstOrDefault((Session session) => session.UserId == "1");

ただし、 FirstOrDefault /SingleOrDefaultまだサポートされていません (現在0.77.2)

AnyFirstおよびSingle現在サポートされています (現在の Linq サポート):

AnyスタイルのIf/Else :

Session session = null;
var sessions = theRealm.All<Session>().Where((Session localSession) => localSession.UserId == "1");
if (!sessions.Any())
    theRealm.Write(() =>
    {
        session = new Session() { UserId = "1", Token = "SO" };
    });
else
    session = sessions.First();
D.WriteLine($"{session?.UserId}:{session?.Token}");

試してみてください/キャッチInvalidOperationException

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}");
于 2016-08-31T16:55:08.803 に答える
2

Update Supportvar localSession = theRealm.All<Session>().FirstOrDefault(session => session.UserId == "1");は、バージョン 0.78.0 以降で出荷されました。

オリジナル

現在、関連するレルムの問題に取り組んでいます。

サポートが必要な特定のシナリオについては、そこにコメントを追加してください。

公式の NuGet リリースに先立って何かを試してみたい場合は、 Nightly フィードも用意されていることに注意してください。

于 2016-09-01T09:23:12.433 に答える