0

これは、この回答で提供されているコードを参照しています。@Tim-Schmelter によるリンクの説明をここに入力してください。

コードは、特定の列で DataTable をグループ化し、列 (ピボット) にカウントを追加することです。

   public DataTable GroupBy(string i_sGroupByColumn, string i_sAggregateColumn, DataTable i_dSourceTable)
    {

        DataView dv = new DataView(i_dSourceTable);

        //getting distinct values for group column
        DataTable dtGroup = dv.ToTable(true, new string[] { i_sGroupByColumn });

        //adding column for the row count
        dtGroup.Columns.Add("Count", typeof(int));

        //looping thru distinct values for the group, counting
        foreach (DataRow dr in dtGroup.Rows)
        {
            dr["Count"] = i_dSourceTable.Compute("Count(" + i_sAggregateColumn + ")", i_sGroupByColumn + " = '" + dr[i_sGroupByColumn] + "'");
        }

        //returning grouped/counted result
        return dtGroup;
    }

ただし、私のデータテーブルには、フィールド名にスペースを含む列 (これを変更することはできません) があります。つまり、「ソリューション ID」です。

これを上記のコードに渡すと、次のようになります。

DataTable Solutions = GroupBy("Solution ID", "Solution ID", tbQ);

...次のエラーが表示されます:構文エラー: 'ID' 演算子の後にオペランドがありません。

[] でカプセル化し、スペースを + に修正しようとしましたが、うまくいきません。

上記のコードを修正して、スペースを含む列を受け入れることはできますか?

ありがとう、マーク

4

1 に答える 1

1

[]でカプセル化して、スペースを+に修正しようとしましたが、機能しません。

スペースをうまく変更することは+確かに機能しませんが、角かっこで囲むことは機能するはずです。試す

if(!i_sAggregateColumn.StartsWith("["))
    i_sAggregateColumn = "[" + i_sAggregateColumn + "]";

if(!i_sGroupByColumn.StartsWith("["))
    i_sGroupByColumn = "[" + i_sGroupByColumn + "]";

列名にすでにブラケットが含まれている場合は、別の方法を試す必要があることに注意してください。

于 2013-01-24T14:04:11.590 に答える