我可能不知道在Google上查找该词的正确术语,所以我在这里问。
说我想拥有一个前端控件,以便在Winforms中运行不同的SQL查询,从而允许输入将在运行时生成的参数。
public class AnalysisQuery
{
public string QueryName { get; set; }
public string QueryDescription { get; set; }
public string QuerySQL { get; set; }
public T QueryParameters { get; set; } // <-- Not sure how to do this
}
说我有2个完全不同的类,它们保存特定查询的参数
public class EmployeeQueryParameters
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Occupation { get; set; }
public DateTime StartingDate { get; set; }
public bool IsMarried { get; set; }
}
public class CarQueryParameters
{
public string CarName { get; set; }
public string CarModel { get; set; }
public string CarMaker { get; set; }
public bool IsDiesel { get; set; }
}
如何在属性QueryParameters
中保留这些不同的类?
最好的方法是什么?
最终,我需要对数据源使用EmployeeQueryParameters或CarQueryParameters,例如
someControl.DataSource = new EmployeeQueryParameters()
{
FirstName = "",
LastName = "",
Occupation = "",
StartingDate = new DateTime(2018, 10, 18),
IsMarried = true
};
到目前为止我已经尝试过......
1)我已经研究了接口,但是看起来只有在每个EmployeeQueryParameters
和CarQueryParameters
类中的所有属性都相同的情况下,它才会起作用。
2)此link显示了一个示例,用于保存不同类型的参数列表。这种方法可以工作,但最终必须仍然知道类型,才能检索正确的类型,例如
public class AnalysisQuery
{
public string QueryName { get; set; }
public string QueryDescription { get; set; }
public string QuerySQL { get; set; }
public Parameter QueryParameters { get; set; }
public AnalysisQuery()
{
QueryName = "QueryName1";
QueryDescription = "QueryDescription1";
QuerySQL = "QuerySQL1";
QueryParameters = Parameter.Create<EmployeeQueryParameters>(
new EmployeeQueryParameters() { FirstName = "first name" });
}
}
仍然要求知道类型以获取值,这样会打败使用通用参数的对象吗?
var analysisQuery = new AnalysisQuery();
EmployeeQueryParameters parameters =
analysisQuery.QueryParameters.Get<EmployeeQueryParameters>();
答案 0 :(得分:0)
答案很大程度上取决于您的UI。您是否具有使用AnalysisQuery作为模型的表单,在其中您动态添加新的键值对来定义查询的参数?然后,我建议对QueryParameters使用字典。您是否仅使用有限数量的预定义类型的查询,然后建议您使用AnalysisQuery作为模型,然后根据下拉列表或单选按钮列表等进行切换。如果您的UI不知道(或不应该)知道)预定义类型的列表,那么您将必须基于QueryParameters中对象的实际类型和值来构造UI,在这种情况下,您可以将其声明为对象并使用反射获取信息。>
最重要的是,您的问题太含糊,无法给出清晰的答案。