2013-11-24 132 views
0

我正在嘗試獲取gridview的數據併發生轉換錯誤。在Linq查詢中拋出錯誤

在下面的代碼中,如果我只是返回「myuserlist」 - 一切都很好。只要我嘗試選擇只有2個字段(如在此代碼中),我得到了鑄件錯誤。我已經看過在這裏發佈的關於這個問題的其他評論,並嘗試了一些沒有成功的事情。

Imports System.Linq 
Imports RoutesEntities 

Partial Class ProfileTest 
    Inherits System.Web.UI.Page 
    Private myentity As New RoutesEntities() 

    Public Function GridView1_GetData() As IQueryable(Of AllUser) 
     Return From myuserlist In myentity.AllUsers Select New With {myuserlist.UserName,myuserlist.Email} 
    End Function 

錯誤:

System.InvalidCastException was unhandled by user code 
HResult=-2147467262 
Message=Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery`1[VB$AnonymousType_0`2[System.String,System.String]]' to type 'System.Linq.IQueryable`1[AllUser]'. 
Source=App_Web_oelfrca5 
StackTrace: 
    at ProfileTest.GridView1_GetData() in C:\xxx\yyy\zzz\Profile.aspx.vb:line 10 
InnerException: 

我想這(除其他事項外):

Return From myuserlist In myentity.AllUsers Select New AllUser() With { 
       .UserName = myuserlist.UserName, 
       .Email = myuserlist.Email} 

,並得到這個:

Exception Details: System.NotSupportedException: The entity or complex type 'RoutesModel.AllUser' cannot be constructed in a LINQ to Entities query. 
+0

雖然它是一個C#的帖子(和一個很好的答案),這也適用於VB.NET:http://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a -linq-to-entities-query – Styxxy

回答

0

如果您不需要具體的AllUser類型在comp ILE時,你可以有你的函數返回一個IQueryable(Of Object),或者甚至一個簡單的IQueryable

Public Function GridView1_GetData() As IQueryable 
    Return From myuserlist In myentity.AllUsers Select New With {myuserlist.UserName,myuserlist.Email} 
End Function 

更新返回IQueryable(Of Object)如果你需要對結果LINQ:

Sub DataTest() 
    Dim qry = GridView1_GetData 
    Dim filteredQry = qry.Take(5) 
End Sub 
使用VB.NET比使用C#更容易,因爲VB.NET支持後期綁定 - 即使變量「x」的類型爲「Object」,因此可能沒有UserName屬性,編譯器將允許`UserName`在運行時被解析。

這不像它可能是有用的,因爲你不能傳遞一個表達式到LINQ操作符,例如,您可以使用.Take.Any的一個超載,但不能使用.Where

+0

非常感謝!我嘗試了幾個小時與所有其他的C#建議(試圖轉換爲VB),徹底失敗。你的代碼是開箱即用的。但是,您能否介紹一下爲什麼我不會始終使用IQuerable,並且從不使用IQueryable(Of xxxx)。您的方法也適用於返回沒有子列表的整個「myuserlist」。我放棄了什麼?並再次感謝! –

+0

@ user2923427已更新。一個子列表是什麼意思? –

+0

對不起,術語不佳 - 我的意思是這也適用:從myuserlist返回在myentity.AllUsers選擇myuserlist –