我正在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”' 这可能吗?答案 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());