3 つのデータベース テーブルがあるとします。
A (id, type, code, ...)
B (code, text)
C (id, key, val)
A.code == B.code
A.id == C.id (C.id is not a unique key, multiple entries are possible)
B.textには、 の形式で置換変数が$KEY$
含まれる場合があります。(したがって、たとえば、「This is a $SOMEKEY$」が含まれる場合があります。Cには、キーと置換値が含まれる場合があります。
$SOMEKEY$: Message
$SOMEOTHERKEY$: Text
現在、交換は 2 段階で行っています。まず、必要なデータをすべて取得します。
var result = from a in context.A where a.type == myType
join b in context.B on a.code == b.code
select new {
ID = a.id,
Code = a.code,
Text = b.Text
};
次に、一致する置換変数をすべて取得します。C で使用できるキーがない可能性があります。
var data = context.C.Where(c => result.Select(r => r.ID).Contains(c));
次に、リストをループして置換を実行します。
foreach (var r in result) {
var local = r;
foreach (var c in data.Where(c => c.id == local.ID)) {
local.Text = local.Text.Replace(c.key, c.val);
}
}
さて、データベースの互換性の問題と読みやすさは別として、最初のデータベース クエリ内で検索と置換を実行することは可能でしょうか?