、、、などのParameters
列を含むId
テーブルがあります。データベースには複数の「シリーズ データ」テーブルも含まれており、1 つの列を含む数列、場合によっては数百列の列があります。私は db スキーマを所有していません。だから私はこれを変えることはできません。Name
TableName
ColumnName
Timestamp
ユーザーは、GUI を使用して、、、およびをName
指定する必要があります。ビジネス ロジックは、一連のデータを返す必要があります。Parameter
StartTime
EndTime
param.TableName
と という名前の列とテーブルにあるデータを取得するにはどうすればよいparam.ColumnName
ですか?
現在、次のような switch ステートメントを使用しています。
public List<double> GetData
(string paramName, DateTime startTime, DateTime endTime)
{
using (var context = new MyEntities())
{
var param =
(from p in context.Parameters where p.Name == paramName select p)
.FirstOrDefault();
switch (param.TableName)
{
case "Table1":
return GetTable1Data(columnName, startTime, endTime);
break;
case "Table2":
return GetTable2Data(columnName, startTime, endTime);
break;
default:
throw new Exception();
}
}
}
private List<double> GetTable1Data
(MyEntities context, string columnName, DateTime startTime, DateTime endTime) {
List<double> data = new List<double>();
switch (columnName)
{
case "Parameter1":
(from d in context.Table1 where d.Timestamp >= startTime && d.Timestamo <= endTime
order by d.Timestamp select d).ForEach(x => data.Add(d.Parameter1));
break;
case "Parameter2":
(from d in context.Table1 where d.Timestamp >= startTime && d.Timestamo <= endTime
order by d.Timestamp select d).ForEach(x => data.Add(d.Parameter2));
break;
case "Parameter3":
(from d in context.Table1 where d.Timestamp >= startTime && d.Timestamo <= endTime
order by d.Timestamp select d).ForEach(x => data.Add(d.Parameter3));
break;
default:
throw new Exception("");
}
return data;
}
private List<double> GetTable2Data(MyEntities context, string columnName, DateTime startTime, DateTime endTime)
{
List<double> data = new List<double>();
switch (columnName)
{
case "Parameter1":
(from d in context.Table2 where d.Timestamp >= startTime && d.Timestamo <= endTime
order by d.Timestamp select d).ForEach(x => data.Add(d.Parameter1));
break;
case "Parameter2":
(from d in context.Table2 where d.Timestamp >= startTime && d.Timestamo <= endTime
order by d.Timestamp select d).ForEach(x => data.Add(d.Parameter2));
break;
case "Parameter3":
(from d in context.Table2 where d.Timestamp >= startTime && d.Timestamo <= endTime
order by d.Timestamp select d).ForEach(x => data.Add(d.Parameter3));
break;
default:
throw new Exception("");
}
return data;
}
この重複は非常に間違っているようです。
より良い方法はありますか?