举行不同类别的财产的最佳方法

时间:2018-11-18 14:57:59

标签: c#

我可能不知道在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)我已经研究了接口,但是看起来只有在每个EmployeeQueryParametersCarQueryParameters类中的所有属性都相同的情况下,它才会起作用。

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>();

1 个答案:

答案 0 :(得分:0)

答案很大程度上取决于您的UI。您是否具有使用AnalysisQuery作为模型的表单,在其中您动态添加新的键值对来定义查询的参数?然后,我建议对QueryParameters使用字典。您是否仅使用有限数量的预定义类型的查询,然后建议您使用AnalysisQuery作为模型,然后根据下拉列表或单选按钮列表等进行切换。如果您的UI不知道(或不应该)知道)预定义类型的列表,那么您将必须基于QueryParameters中对象的实际类型和值来构造UI,在这种情况下,您可以将其声明为对象并使用反射获取信息。

最重要的是,您的问题太含糊,无法给出清晰的答案。