-1

我正在用 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"'

这可能吗?

4

2 回答 2

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 //(?)
于 2015-03-19T16:05:02.660 回答
0

的第二个参数DefaultView.ToTableparams 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());
于 2015-03-19T16:06:22.273 回答