最近、アプリケーション全体をローカライズしましたが、次の問題に直面しています。アプリケーションに次の LINQ クエリがあります。
var ccsum = from a in dtSumGL2.AsEnumerable()
group Math.Abs(a.Field<double>(strpcPSPassBegCost)) by new
{
BaseCC = a.Field<string>(strpcBaseCC)
}
into g
select new
{
g.Key.BaseCC,
PSPassBegCost = g.Sum()
};
これは、SQL Server データベースccsum
を作成し、その後データを入力するために使用する新しいオブジェクトを作成しています。DataTable
DataTable
問題は、列名BaseCC
およびで作成される新しいアイテムのそれぞれが、PSPassBegCost
これらの名前がこれらの名前のドイツ語版と一致しないことです。今私の質問のために:次のようなことをする方法はありますか:
var ccsum = from a in dtSumGL2.AsEnumerable()
group Math.Abs(a.Field<double>(strpcPSPassBegCost)) by new
{
BaseCC = a.Field<string>(strpcBaseCC)
}
into g
select new
{
g.Key.BaseCC as Resources.BaseCC,
PSPassBegCost = g.Sum() as Resources.PSPassBegCost
};
ローカライズされた名前に従ってテーブルに名前を付けることができますか?
編集。DataTable
から取得するコードccsum
は
fooDt = Utils.LINQToDataTable(ccsum);
と
public static DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{
DataTable dtReturn = new DataTable();
PropertyInfo[] oProps = null;
if (varlist == null)
return dtReturn;
foreach (T rec in varlist)
{
// Use reflection to get property names, to create
// table, Only first time, others will follow.
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[0];
}
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
DataRow dr = dtReturn.NewRow();
foreach (PropertyInfo pi in oProps)
{
pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
}
dtReturn.Rows.Add(dr);
}
return dtReturn;
}
御時間ありがとうございます。
別のアプローチは、オブジェクトの「列」の名前ccsum
を後処理ステップとして変更することですが、値はsumcc
実行時に要求されるまで入力されません-他のアイデアはありますか?