2010-07-12 3 views
1
Public Function List_category() As Myobj 
Dim query = From subcat In _dataContext.subcategories, _ 
cat In _dataContext.categories _ 
Where subcat.CategoryID = cat.CategoryID _ 
       Select New Myobj() With { _ 
       .SubcatId = subcat.SubCategoryID, _ 
       .SubcatName = subcat.SubCategoryName, _ 
       .CatId = cat.CategoryID, _ 
       .CatName = cat.CategoryName _ 
       } 
return ????????? 
End Function 

Classe publique MyObjquel type renvoie ma requête d'objet?

Private m_SubcatId As Integer 
Private m_SubcatName As String 
Private m_catId As Integer 
Private m_catName As String 

Public Property SubcatId() As Integer 
    Get 
     Return m_SubcatId 
    End Get 
    Private Set(ByVal value As Integer) 
     m_SubcatId = value 
    End Set 
End Property 

Public Property SubcatName() As String 
    Get 
     Return m_SubcatName 
    End Get 
    Private Set(ByVal value As String) 
     m_SubcatName = value 
    End Set 
End Property 

Public Property CatId() As Integer 
    Get 
     Return m_catId 
    End Get 
    Private Set(ByVal value As Integer) 
     m_catId = value 
    End Set 
End Property 

Public Property CatName() As String 
    Get 
     Return m_catName 
    End Get 
    Private Set(ByVal value As String) 
     m_catName = value 
    End Set 
End Property 

End Class

ne marche pas fonctionne !!!!

Il indique que l'accesseur 'Set' de la propriété 'SubcatName' n'est pas accessible.

+0

facile sur les points d'interrogation, il suffit de penser calme, cool, pensées rationnelles et nous allons passer à travers cela. –

Répondre

0

Vous pouvez créer un type personnalisé et modifier votre select pour instancier cela pour le retour. Jetez un coup d'oeil ici: Linq To Sql return from function as IQueryable<T>

+0

merci, mais pouvez-vous faire un exemple ici –

+0

Um, ok. Mon VB peut être un peu syntaxique, mais c'est l'idée générale (notez que vous aurez besoin de créer la classe MyObject, bien sûr): Return From subcat Dans _dataContext.subcategories, cat In _dataContext.categories Où subcat.CategoryID = cat.CategoryID Sélectionnez New MyObject() avec {.SubCategoryID = subcat.SubCategoryId, .SubCategoryName = subcat.SubCategoryName, .CategoryID = subcat.CategoryID, .CategoryName = cat.CategoryName} – David

+0

Liste des fonctions publiques() As ????? ????????? sera Liste des fonctions publiques() Comme MyObject est oui ??? –

0

Le compilateur vous indique simplement que vous avez déclaré Private Set sur SubcatName et que vous essayez de lui assigner une valeur après New Myobj().

Pour une première course, vous pouvez déclarer une classe POD (ancienne plaine de données - seulement des données publiques, aucune méthode ou propriétés) et une fois que vous le voyez, vous pouvez aller bidouiller runnung, l'ajout de méthodes, etc.

Si c'est vraiment important que toutes les propriétés soient en lecture seule, vous devrez essayer de faire de votre méthode d'interrogation un membre statique de la même classe.

De même, il existe un moyen de renvoyer un type anonyme et de le renvoyer à un type anonyme équivalent déclaré du côté réception. Nous sommes arrivés à passer à C# bien :-)

Exemple (read article):

// Method that returns anonymous type as object 
object ReturnAnonymous() 
{ 
    return new { City="Prague", Name="Tomas" }; 
} 

// Application entry-point 
void Main() 
{ 
    // Get instance of anonymous type with 'City' and 'Name' properties 
    object o = ReturnAnonymous(); 

    // This call to 'Cast' method converts first parameter (object) to the 
    // same type as the type of second parameter - which is in this case 
    // anonymous type with 'City' and 'Name' properties 
    var typed = Cast(o, new { City="", Name="" }); 
    Console.WriteLine("Name={0}, City={1}", typed.Name, typed.City); 
} 

// Cast method - thanks to type inference when calling methods it 
// is possible to cast object to type without knowing the type name 
T Cast<T>(object obj, T type) 
{ 
    return (T)obj; 
} 
Questions connexes