使用Linq对DataTable进行数据筛选
如何将两个DataTable中相同的数据过滤呢?需求是这样的,我们开发的食品药品监督管理系统需要跟外网网站进行数据交接,本来问题是不大,可是现在这个网站让别的公司去做了,呵呵 我们需要通过webservices从外网网站获取一些公众互动的信息。包括公众留言,局长信箱,投诉举报等等,但是慢慢的发现会有很多问题。
他们的数据库设计合理,他们将所有的数据放在一张表,然后通过标识类型,可是除了标识外,其他的字段完全就是留言的字段,又如何能够跟投诉举报联系起来呢?连投诉举报对象都没有
既然问题都是用来解决的,那就开始如何解决吧!
首先获得外网数据
DataTable dt = dal.GetGuestBooks().Tables[0];
然后是内网数据
DataTable SwitchToDT = fdaDal.GetSwitchToWebGuestBooks();
通过Linq对2个datatable进行处理
var query1 = from r in dt.AsEnumerable() where !( from rr in SwitchToDT.AsEnumerable() select rr.Field<string>("WebMarkId") ).Contains(r.Field<int>("GBId").ToString()) select r; int rowNum = 0; foreach (var row in query1) { AppealInfo appealModel = new AppealInfo(); // 留言人 appealModel.Appellor = row["GBPosterName"].ToString(); // 标题 appealModel.Title = row["GBName"].ToString(); // 留言时间 appealModel.AppealDate = Convert.ToDateTime(row["GBPostDateTime"]); // 联系方式 if (row["GBPosterPhone"] != null) { appealModel.Contact = row["GBPosterPhone"].ToString(); } else if (row["GBPosterMobile"] != null) { appealModel.Contact = row["GBPosterMobile"].ToString(); } appealModel.Address = row["GBPosterAddr"].ToString(); // 留言内容 appealModel.Content = row["GBContent"].ToString(); // 办理状态 appealModel.TypeId = Convert.ToInt32(row["GBType"]); appealModel.WebMarkId = row["GBId"].ToString(); // 添加到集合 list.Add(appealModel); } return list;