使用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;

 

posted @ 2010-10-18 17:25  marr  阅读(3931)  评论(0编辑  收藏  举报