开发频道向您推荐《LINQ教程-LINQ to SQL技术精解》,以便于您更好的理解这篇文章。
目前创新互联已为千余家的企业提供了网站建设、域名、网页空间、网站托管维护、企业网站设计、曲麻莱网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
下面进入正题,说说我在开发过程遇到的问题 “LINQ操作DataTable的问题 ”。
在平时的工作中,可能有很多情况下要对DataTable的里面的数据进行处理,最简单的例子如:对DataTable中的某个字段进行排序,根据条件筛选DataTable中的数据。。。,例子很多,下面我们看看如何处理的:
这是我最初写的代码:
代码
- public static IEnumerable getEnumerable()
- {
- DataTable dt = getDatatable();
- try
- {
- var query = from q in dt.AsEnumerable()
- where q.Field
("IPLocation") == "纯真网络 2008年6月20日IP数据" - select new
- {
- IPid = q.Field
("IPid"), - IPFrom = q.Field
("IPFrom"), - IPTo = q.Field
("IPTo"), - IPCity = q.Field
("IPCity"), - IPToNumber = q.Field
("IPToNumber"), - IPFromNumber = q.Field
("IPFromNumber") - };
- return query;
- }
- catch
- {
- return null;
- }
- }
然后我在***做数据源绑定的时候,总是报System.InvalidCastException: 指定的转换无效的错误,无论用Gridview的自动生成列,还是Reapter的手动添加列,都有问题,***我查出生成的结果集就含有异常的存在,也就说再取结果集的时候,要慎重用如下写法:
- IPid = q.Field
("IPid"), - IPFrom = q.Field
("IPFrom"), - IPTo = q.Field
("IPTo"), - IPCity = q.Field
("IPCity"), - IPToNumber = q.Field
("IPToNumber"), - IPFromNumber = q.Field
("IPFromNumber")
我后来尝试了另一种写法:
- IPid = q["IPid"].ToString(),
- IPFrom = q["IPFrom"].ToString(),
- IPTo = q["IPTo"].ToString(),
- IPLocation = q["IPLocation"].ToString(),
- IPCity = q["IPCity"].ToString(),
- IPToNumber = q["IPToNumber"].ToString(),
- IPFromNumber = q["IPFromNumber"].ToString()
一开始我调试也还是报System.InvalidCastException: 指定的转换无效这个错误,我调试了一段时间,也还是有问题,我在想是不是数据绑定控件的问题,后来我将原来的Gridview自动生成列换成了手动输入列:
代码
ID IPFrom IPTo IPLocation City IPToNumber IPFromNumber <%#Eval("IPid")%> <%#Eval("IPFrom")%> <%#Eval("IPTo")%> <%#Eval("IPLocation")%> - <%#Eval("IPCity") %>
<%#Eval("IPToNumber")%> <%#Eval("IPFromNumber")%>
后来问题就解决了,我现在也不知道这个问题什么原因,为什么不支持自动产生列呢(等待高手帮忙解决)?
知道问题的所在了,然后就可以随心的处理DataTable里面的数据了,如下面一个简单的小例子:
代码
- public static IEnumerable getEnumerable()
- {
- DataTable dt = getDatatable();
- try
- {
- var query = from q in dt.AsEnumerable()
- orderby long.Parse(q["IPid"].ToString()) descending
- where q["IPid"].ToString() == "345058"
- select new
- {
- IPid = q["IPid"].ToString(),
- IPFrom = q["IPFrom"].ToString(),
- IPTo = q["IPTo"].ToString(),
- IPLocation = q["IPLocation"].ToString(),
- IPCity = q["IPCity"].ToString(),
- IPToNumber = q["IPToNumber"].ToString(),
- IPFromNumber = q["IPFromNumber"].ToString()
- };
- return query;
- //List
list = new List (); - //foreach (var q in query)
- //{
- //IPInfo model = new IPInfo();
- //model.IPCity = q.IPCity;
- //model.IPFrom = q.IPFrom;
- //model.IPFromNumber = q.IPFromNumber;
- //model.IPid = long.Parse(q.IPid);
- //model.IPLocation = q.IPLocation;
- //model.IPTo = q.IPTo;
- //model.IPToNumber = q.IPToNumber;
- //list.Add(model);
- //}
- //return list;
- }
- catch
- {
- return null;
- }
- }
当然更复杂的对DataTable的操作这里就不在敖述了,在这里我只是说明一下困扰我的问题。
链接:http://www.cnblogs.com/yangtongnet/archive/2010/05/10/1731728.html
网站题目:LINQ操作DataTable出现指定的转换无效问题的解决
网页URL:http://www.shufengxianlan.com/qtweb/news9/174809.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联