LINQ和DataTable查询

时间:2017-01-24 23:37:41

标签: c# linq

我在数据表中有以下内容:

58,10,251,3
58,10,251,1
58,10,251,1
58,10,251,2
58,10,261,1
60,11,666111,1

我想得到以下结果:

251,7
261,1

666111,1

到目前为止,我正在玩这个游戏,我觉得我几乎已经拥有它但不完全确定如何结束它....

var query = from row in dt.AsEnumerable().Where(h => h.Field<string>("COLUMN 0") == val) 
            group row by row.Field<string>("COLUMN 2") 
            into sales 
            orderby sales.Key 
            select new 
            { 
                Name = sales.Key, 
                CountOfClients = sales.Sum(v => sales.Count()) 
            };

这给了我

251,16
261,1
666111,1

因此它适用于261和666111但不适用于251。

不知何故,8人加倍了。

1 个答案:

答案 0 :(得分:0)

sales.Sum(v => sales.Count()) 

这是错误的。您正在总结销售额。这与sales.Count() * sales.Count()相同。

您应该根据之前的查询撰写类似sales.Sum(v => v.Field<int>("COLUMN 4"))或类似内容的内容。

那是:

var query = from row in dt.AsEnumerable().Where(h => h.Field<string>("COLUMN 0") == val) 
        group row by row.Field<string>("COLUMN 2") 
        into sales 
        orderby sales.Key 
        select new 
        { 
            Name = sales.Key, 
            CountOfClients = sales.Sum(v => v.Field<int>("COLUMN 4")) 
        };

如果您的列实际上是字符串,则需要编写:

int.Parse(v.Field<string>("COLUMN 4"))