2010-05-17 7 views
0

J'ai du code pour essayer de parcourir les résultats LINQ, mais cela ne semble pas fonctionner.Comment faire une boucle sur les résultats LINQ (VB.NET)

VOICI LE CODE

Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest 
     ''# the page contenttype is plain text' 
     HttpContext.Current.Response.ContentType = "text/plain" 

     ''# store the querystring as a variable' 
     Dim qs As Nullable(Of Integer) = Integer.TryParse(HttpContext.Current.Request.QueryString("ID"), Nothing) 

     ''# use the RegionsDataContext' 
     Using RegionDC As New DAL.RegionsDataContext 

      ''# create a (q)uery variable' 
      Dim q As Object 

      ''# if the querystring PID is not blank' 
      ''# then we want to return results based on the PID' 
      If Not qs Is Nothing Then 
       ''# that fit within the Parent ID' 
       q = (From r In RegionDC.bt_Regions _ 
         Where r.PID = qs _ 
         Select r.Region).ToArray 

       ''# now we loop through the array' 
       ''# and write out the ressults' 
       For Each item As DAL.bt_Region In q 
        HttpContext.Current.Response.Write(item.Region & vbCrLf) 
       Next 

      End If 



     End Using 
    End Sub 

VOICI L'ERREUR

Public member 'Region' on type 'String' not found. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMemberException: Public member 'Region' on type 'String' not found.

Source Error:

Line 33: ' and write out the ressults Line 34:
For Each item In q Line 35:
HttpContext.Current.Response.Write(item.Region & vbCrLf) Line 36:
Next Line 37:

Source File: E:\Projects\businesstrader\App_Code\Handlers\RegionsAutoComplete.vb Line: 35

Stack Trace:

[MissingMemberException: Public member 'Region' on type 'String' not found.] Microsoft.VisualBasic.CompilerServices.Container.GetMembers(String& MemberName, Boolean ReportErrors) +509081 Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack) +222 BT.Handlers.RegionsAutoComplete.ProcessRequest(HttpContext context) in E:\Projects\businesstrader\App_Code\Handlers\RegionsAutoComplete.vb:35 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

Quelqu'un peut-il me dire ce que je fais mal?

Répondre

2

Le message d'erreur indique que les objets stockés dans la propriété bt_Regions sont de type String et qu'ils n'ont donc pas le membre Region auquel vous essayez d'accéder.

Je revérifier quel est le type de DAL.bt_Regions - il semble que vous supposiez qu'il retourne une classe, mais il semble retourner une collection de chaînes (peut-être juste des noms de régions?). Pour voir ce qu'il contient, vous pouvez modifier le code comme ceci:

HttpContext.Current.Response.Write(item & vbCrLf) // to print the string 

Je voudrais aussi essayer d'ajouter l'option Option Strict On (si possible), qui demander au compilateur de vérifier ce genre d'erreurs à la compilation.

+0

ah oui. en utilisant "item" travaillé puisque je sélectionne seulement un enregistrement (qui est une chaîne) de la base de données. –

Questions connexes