LINQ操作DataTable出现指定的转换无效问题的解决

开发频道向您推荐《LINQ教程-LINQ to SQL技术精解》,以便于您更好的理解这篇文章。

目前创新互联已为千余家的企业提供了网站建设、域名、网页空间、网站托管维护、企业网站设计、曲麻莱网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

下面进入正题,说说我在开发过程遇到的问题 “LINQ操作DataTable的问题 ”。

在平时的工作中,可能有很多情况下要对DataTable的里面的数据进行处理,最简单的例子如:对DataTable中的某个字段进行排序,根据条件筛选DataTable中的数据。。。,例子很多,下面我们看看如何处理的:

这是我最初写的代码:

代码

 
 
 
  1. public static IEnumerable getEnumerable() 
  2.  {
  3.   DataTable dt = getDatatable();
  4.   try
  5.   {
  6.    var query = from q in dt.AsEnumerable()
  7.    where q.Field("IPLocation") == "纯真网络 2008年6月20日IP数据"
  8.    select new
  9.    {
  10.    IPid = q.Field("IPid"),
  11.    IPFrom = q.Field("IPFrom"),
  12.    IPTo = q.Field("IPTo"),
  13.    IPCity = q.Field("IPCity"),
  14.    IPToNumber = q.Field("IPToNumber"),
  15.    IPFromNumber = q.Field("IPFromNumber")
  16.    };
  17.    return query;
  18.    }
  19.    catch
  20.    {
  21.  return null;
  22.   }
  23.  }

然后我在***做数据源绑定的时候,总是报System.InvalidCastException: 指定的转换无效的错误,无论用Gridview的自动生成列,还是Reapter的手动添加列,都有问题,***我查出生成的结果集就含有异常的存在,也就说再取结果集的时候,要慎重用如下写法:

 
 
 
  1. IPid = q.Field("IPid"),
  2. IPFrom = q.Field("IPFrom"),
  3. IPTo = q.Field("IPTo"),
  4. IPCity = q.Field("IPCity"),
  5. IPToNumber = q.Field("IPToNumber"),
  6. IPFromNumber = q.Field("IPFromNumber")

 我后来尝试了另一种写法:

 
 
 
  1. IPid = q["IPid"].ToString(),
  2. IPFrom = q["IPFrom"].ToString(),
  3. IPTo = q["IPTo"].ToString(),
  4. IPLocation = q["IPLocation"].ToString(),
  5. IPCity = q["IPCity"].ToString(),
  6. IPToNumber = q["IPToNumber"].ToString(),
  7. IPFromNumber = q["IPFromNumber"].ToString()

一开始我调试也还是报System.InvalidCastException: 指定的转换无效这个错误,我调试了一段时间,也还是有问题,我在想是不是数据绑定控件的问题,后来我将原来的Gridview自动生成列换成了手动输入列:

代码

 
 
 
  1.    
  2.    
  3.    ID
  4.    IPFrom
  5.    IPTo
  6.    IPLocation
  7.    City
  8.    IPToNumber
  9.    IPFromNumber
  10.    
  11.  
  12.  <%#Eval("IPid")%>
  13.  <%#Eval("IPFrom")%> 
  14.  <%#Eval("IPTo")%> 
  15.  <%#Eval("IPLocation")%>
  16.  
  17. <%#Eval("IPCity") %>
  18.    
  19.  <%#Eval("IPToNumber")%>  
  20.  <%#Eval("IPFromNumber")%>
  21.    
  22.  
  23.    
  24.  

后来问题就解决了,我现在也不知道这个问题什么原因,为什么不支持自动产生列呢(等待高手帮忙解决)?

知道问题的所在了,然后就可以随心的处理DataTable里面的数据了,如下面一个简单的小例子:

代码

 
 
 
  1. public static IEnumerable getEnumerable()
  2.    {
  3.   DataTable dt = getDatatable();
  4.   try
  5.   {
  6.  var query = from q in dt.AsEnumerable()
  7.    orderby long.Parse(q["IPid"].ToString()) descending
  8.    where q["IPid"].ToString() == "345058"
  9.    select new
  10.    {
  11.   IPid = q["IPid"].ToString(),
  12.   IPFrom = q["IPFrom"].ToString(),
  13.   IPTo = q["IPTo"].ToString(),
  14.   IPLocation = q["IPLocation"].ToString(),
  15.   IPCity = q["IPCity"].ToString(),
  16.   IPToNumber = q["IPToNumber"].ToString(),
  17.   IPFromNumber = q["IPFromNumber"].ToString()
  18.    };
  19.  return query;
  20.  //List list = new List();
  21.  //foreach (var q in query)
  22.  //{
  23.  //IPInfo model = new IPInfo();
  24.  //model.IPCity = q.IPCity;
  25.  //model.IPFrom = q.IPFrom;
  26.  //model.IPFromNumber = q.IPFromNumber;
  27.  //model.IPid = long.Parse(q.IPid);
  28.  //model.IPLocation = q.IPLocation;
  29.  //model.IPTo = q.IPTo;
  30.  //model.IPToNumber = q.IPToNumber;
  31.  //list.Add(model);
  32.  //}
  33.  //return list;
  34.   }
  35.   catch
  36.   {
  37.  return null;
  38.   }
  39.    }

当然更复杂的对DataTable的操作这里就不在敖述了,在这里我只是说明一下困扰我的问题。

链接:http://www.cnblogs.com/yangtongnet/archive/2010/05/10/1731728.html

网站标题:LINQ操作DataTable出现指定的转换无效问题的解决
链接URL:http://www.gawzjz.com/qtweb/news9/174809.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联