新聞中心
開發(fā)頻道向您推薦《LINQ教程-LINQ to SQL技術(shù)精解》,以便于您更好的理解這篇文章。

目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、曲麻萊網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
下面進入正題,說說我在開發(fā)過程遇到的問題 “LINQ操作DataTable的問題 ”。
在平時的工作中,可能有很多情況下要對DataTable的里面的數(shù)據(jù)進行處理,最簡單的例子如:對DataTable中的某個字段進行排序,根據(jù)條件篩選DataTable中的數(shù)據(jù)。。。,例子很多,下面我們看看如何處理的:
這是我最初寫的代碼:
代碼
- public static IEnumerable getEnumerable()
- {
- DataTable dt = getDatatable();
- try
- {
- var query = from q in dt.AsEnumerable()
- where q.Field
("IPLocation") == "純真網(wǎng)絡(luò) 2008年6月20日IP數(shù)據(jù)" - 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;
- }
- }
然后我在***做數(shù)據(jù)源綁定的時候,總是報System.InvalidCastException: 指定的轉(zhuǎn)換無效的錯誤,無論用Gridview的自動生成列,還是Reapter的手動添加列,都有問題,***我查出生成的結(jié)果集就含有異常的存在,也就說再取結(jié)果集的時候,要慎重用如下寫法:
- 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()
一開始我調(diào)試也還是報System.InvalidCastException: 指定的轉(zhuǎn)換無效這個錯誤,我調(diào)試了一段時間,也還是有問題,我在想是不是數(shù)據(jù)綁定控件的問題,后來我將原來的Gridview自動生成列換成了手動輸入列:
代碼
ID IPFrom IPTo IPLocation City IPToNumber IPFromNumber <%#Eval("IPid")%> <%#Eval("IPFrom")%> <%#Eval("IPTo")%> <%#Eval("IPLocation")%> - <%#Eval("IPCity") %>
<%#Eval("IPToNumber")%> <%#Eval("IPFromNumber")%>
后來問題就解決了,我現(xiàn)在也不知道這個問題什么原因,為什么不支持自動產(chǎn)生列呢(等待高手幫忙解決)?
知道問題的所在了,然后就可以隨心的處理DataTable里面的數(shù)據(jù)了,如下面一個簡單的小例子:
代碼
- 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;
- }
- }
當然更復(fù)雜的對DataTable的操作這里就不在敖述了,在這里我只是說明一下困擾我的問題。
鏈接:http://www.cnblogs.com/yangtongnet/archive/2010/05/10/1731728.html
標題名稱:LINQ操作DataTable出現(xiàn)指定的轉(zhuǎn)換無效問題的解決
標題網(wǎng)址:http://www.dlmjj.cn/article/cdsjogi.html


咨詢
建站咨詢
