このクラスの 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