动态字符串C#.ToTable(true,“Dynamic String Here”);

时间:2015-03-19 15:57:32

标签: c# dynamic defaultview

我正在C#中动态构建一个表。此表可能包含也可能不包含某些列。我需要一个由原始表中的不同值组成的行。 (即代理人姓名,经理姓名等)。

我用:

var DistinctTable = SourceTable.DefaultView.ToTable(true, "AName", "MName");

并且它工作正常,但我需要使用

之类的东西
    string Groupby = "";

    if (AName != "")
    {
        Groupby = AName;
    }
    if (MName != "")
    {
        Groupby = Groupby + MName;
    }

var DistinctTable = SourceTable.DefaultView.ToTable(true, Groupby);

为了简单起见,我稍微考虑了这一点,但前提是存在。我已经尝试过添加引号,添加逗号等的选项。我所做的最好的工作就是收到错误

表(x)

中没有列'“AName”,“MName”' 这可能吗?

2 个答案:

答案 0 :(得分:0)

由于DistinctTable正在(返回?)进入DataTable,因此您可以这样做:

if (DistinctTable.Columns.Contains("ColumnName"))
{
    //[logic]
}

编辑添加:

DataTable DistinctTable = SourceTable.DefaultView.ToTable();
if (DistinctTable.Rows.Count > 0)
{
    if (!DistinctTable.Columns.Contains("ColumnA"))
    {
        DistinctTable.Columns.Add("ColumnA", typeof(String));
    }
    if (!DistinctTable.Columns.Contains("ColumnB"))
    {
        DistinctTable.Columns.Add("ColumnA", typeof(String));
    }
    if (!DistinctTable.Columns.Contains("ColumnC"))
    {
        DistinctTable.Columns.Add("ColumnC", typeof(String));
        //you can also move the new columns by using SetOrdinal, like so:
        DistinctTable.Columns[DistinctTable.Columns.Count - 1].SetOrdinal(DistinctTable.Columns.Count - 2);
        //but careful, this gets messy very quickly
    }
}
//return DistinctTable //(?)

答案 1 :(得分:0)

DefaultView.ToTable的第二个参数是params string[],因此您应该可以创建一个数组来传递给它。

List<string> groupBys = new List<string>();

if (AName != "")
{
    groupBys.Add(AName);
}
if (MName != "")
{
    groupBys.Add(MName);
}

var DistinctTable = SourceTable.DefaultView.ToTable(true, groupBys.ToArray());