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

目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網站建設、域名、網頁空間、網站托管維護、企業(yè)網站設計、曲麻萊網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
下面進入正題,說說我在開發(fā)過程遇到的問題 “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")%>
后來問題就解決了,我現(xiàn)在也不知道這個問題什么原因,為什么不支持自動產生列呢(等待高手幫忙解決)?
知道問題的所在了,然后就可以隨心的處理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出現(xiàn)指定的轉換無效問題的解決
網站路徑:http://m.fisionsoft.com.cn/article/cdsjogi.html


咨詢
建站咨詢
