Windows サービス通知プロジェクト (.NET 4.0) でStringTemplateを使用しています。私の目的は、クエリと文字列テンプレートを定義する XML ファイルを読み込んで処理することです。次に、このクラスは、DataTable からの結果を電子メール送信用のテンプレートにバインドします。以下は、XML スニペットと、バインディングを行うための LINQ ステートメントと C# です。
<!-- XML Data Original-->
<Items>
<Item>
<Query>
Select name, title, date from People;
</Query>
<Template>
Welcome $name to $title$ on $date$.
</Template>
</Item>
</Items>
var dataTable = database.GetQuery(query);
var data = (from dataRow in dataTable.AsEnumerable()
select new
{
Name = dataRow.Field<string>("Name"),
Title = dataRow.Field<string>("Title"),
Date = dataRow.Field<DateTime>("Date")
}).Distinct();
stringTemplate.SetAttribute("Name", data.Name);
stringTemplate.SetAttribute("Title", data.Title);
stringTemplate.SetAttribute("Date", data.Date);
問題は、上記の C# が静的であることです。動的にしたいと考えています。XML クエリ要素に別のフィールドと対応するテンプレート フィールドを追加する必要がある場合はどうすればよいでしょうか。
<!-- XML Data Modified-->
<Items>
<Item>
<Query>
Select name, title, date, location from People;
</Query>
<Template>
Welcome $name to $title$ on $date$ at $location$.
</Template>
</Item>
</Items>
DataTable には新しい列が含まれていますが、LINQ ステートメントとバインディング コードには含まれていません。私の質問は、データを DataTable から取得して stringtemplate に動的にバインドするためにどのような戦略を採用できるかということです。現在LINQを使用していますが、ソリューションはそうである必要はありません。