1

このクラスの RavenDB にコレクションがあります...

public class Report
{
    public string User { get; set; }
    public int Quarter { get; set; }
    public int Year { get; set; }
    public string ReportData { get; set; }
}

ユーザーごとに、四半期ごと、年ごとに 1 つのレポートしかありません (したがって、識別キーは{ User, Quarter, Year }です。これらのレポートのリストを保存し、必要に応じて古いものを上書きしたり、新しいものを挿入したりする機能を作成したいと思います。私はこれを思いつきました:

public void Save(IList<Report> reports)
{
    session.Query<Report>()
        .Join(reports,
            x => new { x.User, x.Quarter, x.Year },
            y => new { y.User, y.Quarter, y.Year },
            (x, y) => new { OldReport = x, NewReport = y })
        .ForEach(report =>
        {
            if (report.OldReport != null)
                report.OldReport.InjectFrom(report.NewReport);
            else
                session.Store(report.NewReport);
        });

    session.SaveChanges();
}

.Joinただし、RavenDB はこの演算子 をサポートしていません。編集:これが機能するには、これも右外部結合である必要があることに気付きましたが、それは私の意図を伝えたと思います。 これを実現するには、ある種の Map Reduce を実行する必要があることはわかっていますが、RavenDB を初めて使用するので、自分が行っていることに関連する良い例が見つかりません。誰かがこのようなことを試しましたか?

PS誰かが不思議に思っていたら、.InjectFrom()操作は を使用しています。Omu.ValueInjecter

4

1 に答える 1