Недопустимое использование агрегатной функции Sum() и Type: String

Вопрос: У меня есть таблица данных, а столбец содержит значения int. Я не указывал колонку с любым типом данных. Когда я выполняю следующее. object sum = dttest.Compute("sum(Value)", ""); Я становлюсь ниже ошибки. Недопустимое использование агрегатной функции Sum() и Type: String. И я попытался преобразовать значение столбца в int используя object sum = dttest.Compute("sum(Convert(Value, 'System.Int32'))",""); снова

Вопрос:

У меня есть таблица данных, а столбец содержит значения int. Я не указывал колонку с любым типом данных. Когда я выполняю следующее.

object sum = dttest.Compute(«sum(Value)», «»);

Я становлюсь ниже ошибки.

Недопустимое использование агрегатной функции Sum() и Type: String.

И я попытался преобразовать значение столбца в int используя

object sum = dttest.Compute(«sum(Convert(Value, ‘System.Int32’))»,»»);

снова я получаю еще одну ошибку

Синтаксическая ошибка в агрегированном аргументе: ожидая один аргумент столбца с возможным квалификатором “Child”.

Когда я укажу тип данных для столбца, первый код вернет правильное значение. Но в моем случае я не могу указать тип столбца столбца. Любой, у кого есть решение?

Лучший ответ:

Вы можете использовать LINQ to Datatable:

var result = dttest.AsEnumerable() .Sum(x => Convert.ToInt32(x[«Value»]));

Пример того, как Sum для определенного имени:

var result = dttest.AsEnumerable() .Where(r => r.Field<string>(«Name») == «FilterName») .Sum(x => Convert.ToInt32(x[«Value»])); Ответ №1

пытаться

object sum = dttest.Compute(«Sum(Value)», «[Value] IS NOT NULL»);

Образец кода

static DataTable GetTable() { DataTable table = new DataTable(); table.Columns.Add(«Value», typeof(int)); table.Columns.Add(«Name», typeof(string)); table.Rows.Add(null, «a»); table.Rows.Add(50, «a»); table.Rows.Add(10, «a»); table.Rows.Add(21, «b»); table.Rows.Add(100, «b»); return table; } static void Main(string[] args) { DataTable dt =GetTable(); var str = dt.Compute(«Sum(Value)», «Name=’a’ and Value is not null»); }

Вы не можете вызывать сумму с помощью Convert, но можете попробовать ниже

DataTable dt =GetTable(); dt.Columns.Add(«temp», typeof(int), «Convert(Value, ‘System.Int32′)»); var str = dt.Compute(«Sum(temp)», «Name=’a’ and Value is not null»); Ответ №2

пытаться

dttest.Compute(«Sum(Convert([Value], ‘System.Int32’))»,»[Value] IS NOT NULL»); Ответ №3

Когда программа попытается суммировать столбец данных, который объявлен как строка, эта ошибка возникает.
Используйте приведенный ниже код, чтобы выполнить операцию вычисления в столбце строки.

dtTable.Compute(«Sum(Convert(» + col_Name + «, ‘System.Int32’)»,»»);

Оцените статью
Добавить комментарий