我下面用linq去过滤数据报 转换格式错误

c___s__d_n 2013-11-05 01:19:34


DataTable 数据如上图。。我下面用linq去过滤数据报 转换格式错误。。请教大家。。

List<int> callTypes = new List<int> { 2, 3 };
var query = from data in ds.Tables[0].AsEnumerable()
where callTypes.Contains(data.Field<int>("CallType"))
group data by new { t1 = data.Field<int>("Ent_ID"), t2 = data.Field<string>("SDate") } into m
select new
{

Ent_ID = m.Key.t1,
SDate = m.Key.t2,
CallAll = m.Select(x => x.Field<string>("CallCode")).Distinct().Count()
};
foreach (var item in query) //这里就报错了。。。
{
WriteSysLog(item.Ent_ID + "..." + item.SDate + "..." + item.CallAll);
}

var query_Trs_Suc = from data in ds.Tables[0].AsEnumerable()
let ToLen = data.Field<int>("TotalLen")
where data.Field<int>("CallType") == 2 && data.Field<string>("Called").Length > 5
&& ToLen>0
group data by new { t1 = data.Field<int>("Ent_ID"), t2 = data.Field<string>("SDate") } into m
select new
{

Ent_ID = m.Key.t1,
SDate = m.Key.t2,
CallIn_TRS_Suc = m.Select(x => x.Field<string>("CallCode")).Distinct().Count()
};
foreach (var item_trs_suc in query_Trs_Suc)
{
WriteSysLog(item_trs_suc.Ent_ID + "..." + item_trs_suc.SDate + "..." + item_trs_suc.CallIn_TRS_Suc);
}
...全文
226 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2013-11-05
  • 打赏
  • 举报
回复
仔细看我4楼的代码,我不止修改了一处: Ent_ID = m.Key.t1.HasValue?m.Key.t1.Value:0, 我觉得你的错误是在这里的tostring() WriteSysLog(item.Ent_ID.ToString() + "..." + item.SDate + "..." + item.CallAll.ToString());
c___s__d_n 2013-11-05
  • 打赏
  • 举报
回复
引用 4 楼 q107770540 的回复:
var query = from data in ds.Tables[0].AsEnumerable()
where callTypes.Contains(data.Field<int>("CallType"))
group data by new { t1 = data.Field<int?>("Ent_ID"), t2 = data.Field<string>("SDate") } into m
select new
{

Ent_ID = m.Key.t1.HasValue?m.Key.t1.Value:0,
SDate = m.Key.t2,
CallAll = m.Select(x => x.Field<string>("CallCode")).Distinct().Count()
};


试了下,还是报格式转换错误。。

我看出是因为 CallAll = m.Select(x => x.Field<string>("CallCode")).Distinct().Count()

报的错误
q107770540 2013-11-05
  • 打赏
  • 举报
回复
var query = from data in ds.Tables[0].AsEnumerable() where callTypes.Contains(data.Field<int>("CallType")) group data by new { t1 = data.Field<int?>("Ent_ID"), t2 = data.Field<string>("SDate") } into m select new { Ent_ID = m.Key.t1.HasValue?m.Key.t1.Value:0, SDate = m.Key.t2, CallAll = m.Select(x => x.Field<string>("CallCode")).Distinct().Count() };
q107770540 2013-11-05
  • 打赏
  • 举报
回复
很明显,你的数据中 data.Field<int>("Ent_ID") 有NULL的情况
c___s__d_n 2013-11-05
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:
foreach (var item in query) 改为: foreach (var item in query.ToList())
foreach (var item in query.ToList()) { WriteSysLog(item.Ent_ID + "..." + item.SDate + "..." + item.CallAll); } 改了,还是报一样错。。
Andy__Huang 2013-11-05
  • 打赏
  • 举报
回复
foreach (var item in query) 改为: foreach (var item in query.ToList())

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧