您好,登錄后才能下訂單哦!
這篇文章主要講解了“LINQ操作DataTable出現指定的轉換無效問題怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“LINQ操作DataTable出現指定的轉換無效問題怎么解決”吧!
代碼
public static IEnumerable getEnumerable() { DataTable dt = getDatatable(); try { var query = from q in dt.AsEnumerable() where q.Field<string>("IPLocation") == "純真網絡 2008年6月20日IP數據" select new { IPid = q.Field<int>("IPid"), IPFrom = q.Field<string>("IPFrom"), IPTo = q.Field<string>("IPTo"), IPCity = q.Field<string>("IPCity"), IPToNumber = q.Field<string>("IPToNumber"), IPFromNumber = q.Field<string>("IPFromNumber") }; return query; } catch { return null; } }
然后我在***做數據源綁定的時候,總是報System.InvalidCastException: 指定的轉換無效的錯誤,無論用Gridview的自動生成列,還是Reapter的手動添加列,都有問題,***我查出生成的結果集就含有異常的存在,也就說再取結果集的時候,要慎重用如下寫法:
IPid = q.Field<int>("IPid"), IPFrom = q.Field<string>("IPFrom"), IPTo = q.Field<string>("IPTo"), IPCity = q.Field<string>("IPCity"), IPToNumber = q.Field<string>("IPToNumber"), IPFromNumber = q.Field<string>("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自動生成列換成了手動輸入列:
代碼
<table align="center" width="100%" cellpadding="0" cellspacing="0" style="border: Gray 1px solid; margin-top:5px; margin-bottom:10px"> <asp:Repeater ID="rpTest" runat="server"> <HeaderTemplate> <tr> <th style=" background-color:Gray; color:White;border: Gray 1px solid;text-align:center">ID</th> <th style=" background-color:Black; color:White;border: Gray 1px solid;text-align:center">IPFrom</th> <th style=" background-color:Black; color:White;border: Gray 1px solid;text-align:center">IPTo</th> <th style=" background-color:Black; color:White;border: Gray 1px solid;text-align:center">IPLocation</th> <th style=" background-color:Black; color:White;border: Gray 1px solid;text-align:center">City</th> <th style=" background-color:Black; color:White;border: Gray 1px solid;text-align:center">IPToNumber</th> <th style=" background-color:Black; color:White;border: Gray 1px solid;text-align:center">IPFromNumber</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td style="border: Gray 1px solid;text-align:center;"><%#Eval("IPid")%></td> <td style="border: Gray 1px solid;text-align:center;"><%#Eval("IPFrom")%></td> <td style="border: Gray 1px solid;text-align:center;"><%#Eval("IPTo")%></td> <td style="border: Gray 1px solid;text-align:center;"><%#Eval("IPLocation")%></td> <td style="border: Gray 1px solid;text-align:center;"> <%#Eval("IPCity") %> </td> <td style="border: Gray 1px solid;text-align:center;"><%#Eval("IPToNumber")%></td> <td style="border: Gray 1px solid;text-align:center;"><%#Eval("IPFromNumber")%></td> </tr> </ItemTemplate> </asp:Repeater> </table>
后來問題就解決了,我現在也不知道這個問題什么原因,為什么不支持自動產生列呢(等待高手幫忙解決)?
知道問題的所在了,然后就可以隨心的處理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<IPInfo> list = new List<IPInfo>(); //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; } }
感謝各位的閱讀,以上就是“LINQ操作DataTable出現指定的轉換無效問題怎么解決”的內容了,經過本文的學習后,相信大家對LINQ操作DataTable出現指定的轉換無效問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。