'System.Collections.Generic.IEnumerable <short>'不包含'Sum'的定义</short>

时间:2014-12-15 04:59:48

标签: c# asp.net linq

我在这一行收到编译错误:

 GridView1.Columns[9].FooterText
        = (from row in dt.AsEnumerable()
           select row.Field<Int16>("quantity"))
                       .Skip(GridView1.PageIndex * GridView1.PageSize)
                       .Take(GridView1.PageSize).Sum()
                       .ToString();

在我的数据库表中,Quantity声明为Smallint

当我构建我的解决方案时,它抛出这两个异常

Error   40  Instance argument: cannot convert from
'System.Collections.Generic.IEnumerable<short>' to
'System.Collections.Generic.IEnumerable<int>'

 Error  41  `'System.Collections.Generic.IEnumerable<short>'` does not
 contain a definition for 'Sum' and the best extension method overload
'System.Linq.Enumerable.Sum(System.Collections.Generic.IEnumerable<int>)'
 has some invalid arguments

我如何解决这个问题

1 个答案:

答案 0 :(得分:4)

Sum()不包含接受short的重载(参见documentation)。

你总是可以转换为int,然后对转换的集合求和。

GridView1.Columns[9].FooterText
    = (from row in dt.AsEnumerable()
       select row.Field<Int16>("quantity"))
                   .Skip(GridView1.PageIndex * GridView1.PageSize)
                   .Take(GridView1.PageSize).Select(x => (int)x).Sum()
                   .ToString();