2009-11-09 5 views
1

J'essaye de tirer quelques données et l'insère dans un gridview. Mais je dois faire quelque chose de mal puisque je ne peux sélectionner qu'une seule colonne. Si j'essaie d'obtenir à la fois le prénom et le nom, ils seront simplement insérés dans le même td dans la grille.LINQ-to-sql + C#. Récupérer seulement quelques colonnes de la table à la grille

Méthode jusqu'à présent est:

public string[] ShowName() 

    { 
     LinqToEbuboo_20DataContext db = new LinqToEbuboo_20DataContext(); 
     var myusers = from u in db.db_users 
      where u.uid > 13 
      select u.firstname; 

      return myusers.ToArray(); 
    } 

Je suis assez familier avec C# et LINQ (et gridviews pour cette cause), donc il est probablement un problème assez simple.

Il est construit comme ceci:

1) aspx (frontend) 
2) webservice 
3) C# (business logic) 
4) database 

La méthode affichée ici est dans la couche d'affaires et sera appelé à partir de la webservive qui renverra le résultat au frontend où le résultat sera lié à un gridview comme ceci:

GridView1.DataSource = s.showemail(); 
GridView1.DataBind(); 

---------- (fin de la question originale) --------------------

Suivre -up sur les réponses: C'est ce que je avoir construire maintenant en fonction de l'entrée. Cela ne fonctionne toujours pas. Depuis aspx, où j'essaie de définir la source de données pour le gridview, une erreur s'affiche. Quelque chose avec une référence qui est nécessaire. Mais en essayant de créer je ne peux pas en raison d'une boucle dans les références ...

User.cs

namespace Ebuboo 
{ 
    public class User 
    { 
    public PersonName[] ListStrangers() 
    { 
     LinqToEbuboo_20DataContext db = new LinqToEbuboo_20DataContext(); 
     var myusers = from u in db.db_users 
     where u.uid > 12 
     select new PersonName { FirstName = u.firstname, LastName = u.lastname }; 
     return myusers.ToArray(); 
     } 
    } 
    } 
    public class PersonName 
    { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    } 
} 

Les ListStrangers() est appelée à partir d'un webservice:

[WebMethod] 
    public PersonName[] ws_listUsers() 
    { 
    User u = new User(); 
    return u.ListStrangers(); 
    } 

Et la webservice est appelé à partir d'un aspx qui essaie de lier le résultat à un gridview:

// create instance of webservice 
    Ebuboo_WS.Service1 s = new Ebuboo_WS.Service1(); 

    // Bind and output result in Gridview 
    GvListUsers.DataSource = s.ws_listUsers(); 
    GvListUsers.DataBind(); 

Br.

+0

Si vous n'êtes pas familier avec C# et LINQ (et gridviews pour cela), pourquoi ne pas acheter un livre ou lire la documentation MSDN? –

+1

Salut. J'ai eu le "Programming C# 3.0" de Jesse Liberty. Je travaille à plein temps avec php sur des serveurs linux, mais je viens de commencer à étudier les technologies Microsoft. C# n'est pas la seule chose nouvelle. La plupart sont nouveaux, comme C#, LINQ, tout le framework .net et Visual Studio. Il est juste trop grand pour saisir et comprendre en une seule fois. Mais je suis bien managé et ne pose que des questions quand je suis coincé. – Tillebeck

+0

Il semble que je ne peux pas simplement renvoyer PersonName []. J'ai essayé d'écrire dans ma question comment je l'ai fait. Si vous pouvez y voir une erreur, je l'apprécierai. – Tillebeck

Répondre

1

Vous ne pouvez pas renvoyer un anonymous type à partir de votre fonction, vous ne pouvez donc pas obtenir plusieurs colonnes de cette façon.

Vous devriez faire quelque chose comme ceci où vous créez un type qui contient les résultats de votre requête (les colonnes multiples) de sorte que vous puissiez les renvoyer d'une fonction.

public PersonName[] ShowName() 
{ 
    LinqToEbuboo_20DataContext db = new LinqToEbuboo_20DataContext(); 
    var myusers = from u in db.db_users 
        where u.uid > 13 
        select new PersonName { FirstName = u.firstname, LastName = u.lastname }; 
    return myusers.ToArray(); 
} 

public class PersonName { 
    public string FirstName { get; set; }; 
    public string LastName { get; set; }; 
} 
+1

Merci.J'ai fait un peu de lecture et suis de retour avec Visual Studio. Je peux me tromper. J'ai un fichier appelé user.cs avec un user-class suivi de votre classe PersonName avec le get/set. Dans la classe User, j'ai la méthode avec le LINQ qui retourne PersonName []. Est-ce correct? Je demande depuis que j'obtiens une erreur quand j'essaye d'accéder à la grille de données à la grille (Erreur Le type 'Ebuboo_BL.PersonName' est défini dans un assembly qui n'est pas référencé Vous devez ajouter une référence à l'assembly 'Ebuboo_BL, Version = 1.0.0.0 , Culture = neutre, PublicKeyToken = null '....) – Tillebeck

0

Essayez de créer un type anonyme dans votre requête:

LinqToEbuboo_20DataContext db = new LinqToEbuboo_20DataContext(); 
var myusers = from u in db.db_users 
    where u.uid > 13 
    select new { u.firstname, u.lastname }; 

Cependant, comme Jason Punyon écrit, vous ne pouvez pas retourner les types anonymes de votre méthode.

Questions connexes