64 votes

Retourner la liste en utilisant select new dans LINQ

C'est ma méthode qui me donne une erreur.

 public List<Project> GetProjectForCombo()
{
    using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString()))
    {
        var query = from pro in db.Projects
                    select new { pro.ProjectName, pro.ProjectId };

        return query.ToList();
    }
}

Si je le change avec ça :

 public List<Project> GetProjectForCombo()
{
    using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString()))
    {
        var query = from pro in db.Projects
                    select pro;

        return query.ToList();
    }
}

Ensuite, cela fonctionne très bien sans erreurs.

Pouvez-vous s'il vous plaît me dire comment je peux retourner seulement ProjectId et ProjectNam ?

133voto

Hasan Khan Points 20723

La méthode ne peut pas retourner de type anonyme. Il doit être identique au type défini dans le type de retour de méthode. Vérifiez la signature de GetProjectForCombo et voyez quel type de retour vous avez spécifié.

Créez une classe ProjectInfo avec les propriétés requises, puis dans une nouvelle expression, créez un objet de type ProjectInfo.

 class ProjectInfo
{
   public string Name {get; set; }
   public long Id {get; set; }
}

public List<ProjectInfo> GetProjectForCombo()
{
    using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString()))
    {
        var query = from pro in db.Projects
                    select new ProjectInfo(){ Name = pro.ProjectName, Id = pro.ProjectId };

        return query.ToList();
    }
}

13voto

John Peters Points 3662
public List<Object> GetProjectForCombo()
{
   using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString()))
   {
     var query = db.Project
     .Select<IEnumerable<something>,ProjectInfo>(p=>
                 return new ProjectInfo{Name=p.ProjectName, Id=p.ProjectId);       

     return query.ToList<Object>();
   }

}

6voto

Colin Mackay Points 9303

Vous ne pouvez pas renvoyer de types anonymes à partir d'une classe ... (Eh bien, vous pouvez, mais vous devez d'abord les convertir en objet, puis utiliser la réflexion de l'autre côté pour extraire à nouveau les données), vous devez donc créer une petite classe pour les données à contenir.

 class ProjectNameAndId
{
    public string Name { get; set; }
    public string Id { get; set; }
}

Ensuite, dans votre instruction LINQ :

 select new ProjectNameAndId { Name = pro.ProjectName, Id = pro.ProjectId };

4voto

user2383325 Points 31
public List<Object> GetProjectForCombo()
{
    using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString()))
     {
         var query = from pro in db.Projects
                     select new {pro.ProjectName,pro.ProjectId};

         return query.ToList<Object>();
    }
}

2voto

Martin Chinome Points 308

essaie cette solution pour moi ça marche

      public List<ProjectInfo> GetProjectForCombo()
      {
    using (MyDataContext db = new MyDataContext 
    (DBHelper.GetConnectionString()))
         {
        return  (from pro in db.Projects
                    select new { query  }.query).ToList();
        }
      }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X