LINQ查询结果迭代

我使用下面的代码来获得结果形成一个DataTable,但在使用foreach循环生成的查询时,它抛出一个异常:“无法投类型'System.Int64'的对象键入'System.String'”。 请指导我在哪里,我在代码中有错误。

var query = from detailRow in dtDetail.AsEnumerable() group detailRow by detailRow.Field<string>("Domain") into grouping select new { Domain = grouping.Key, Impressions = grouping.Count(), Clicks = grouping.Sum(detailRow => int.Parse(detailRow.Field<string>("Clicks").ToString())), url = grouping.First<DataRow>() }; foreach (var detailRowGroup in query) { console.wirteline(detailRowGroup.Domain + detailRowGroup.Impressions + detailRowGroup.Clicks + detailRowGroup.url); }

--------------解决方案-------------

dtDetail DataTable中包含一列,命名Click包含类型的值Int64 ,而你正在试图找回它作为一个String 。 问题出在下面一行:

int.Parse(detailRow.Field<string>("Clicks").ToString())

将其更改为:

int.Parse(detailRow.Field<Int64>("Clicks").ToString())

不知道你的数据很难说,但我猜你的点击次数列是数字,所以你会想要的类型参数是在long (64位INT)?

detailRow.Field<long>("Clicks")

也许?

如果这是真的,那么你也许可以重构代码,以避免解析了。

我解决了这个问题,发现我已经在我的代码两个错误。 这些都是;
1.我用的Int64的地方字符串。 通过与Int64的替换字符串解决错误。
2.为DBNull我如果条件下使用。
以下是对代码线;

Clicks = grouping.Sum(detailRow => Int64.Parse(detailRow.IsNull("Clicks") ? "0" : detailRow.Field<Int64>("Clicks").ToString())),

感谢史蒂芬和史蒂夫·黑格。

分类:asp.net 时间:2015-03-15 人气:0
本文关键词: asp.net,LINQ
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.427 (s). 10 q(s)