Вопрос:
У меня есть таблица данных, а столбец содержит значения 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’)»,»»);