it-swarm.com.de

Rückkehrliste mit select new in LINQ

Dies ist meine Methode, die mir Fehler gibt.

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();
    }
}

Wenn ich es so ändere:

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

        return query.ToList();
    }
}

Dann funktioniert es prima kein Fehler.

Können Sie mir bitte mitteilen, wie ich nur ProjectId und ProjectName zurückgeben kann?.

Vielen Dank.

47
Sami

Die Methode kann keinen anonymen Typ zurückgeben. Es muss dem Typ entsprechen, der im Rückgabetyp der Methode definiert ist. Überprüfen Sie die Signatur von GetProjectForCombo und prüfen Sie, welchen Rückgabetyp Sie angegeben haben.

Erstellen Sie eine Klasse ProjectInfo mit den erforderlichen Eigenschaften und erstellen Sie dann in einem neuen Objekt ein Objekt vom Typ 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();
    }
}
95
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>();
   }

}

7
John Peters

Sie können keine anonymen Typen aus einer Klasse zurückgeben ... (Nun, Sie können, aber Sie müssen sie zuerst in ein Objekt umwandeln und dann auf der anderen Seite Reflection verwenden, um die Daten wieder herauszuholen). Sie müssen also eine kleine Klasse erstellen die Daten, die darin enthalten sein sollen.

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

Dann in Ihrer LINQ-Anweisung:

select new ProjectNameAndId { Name = pro.ProjectName, Id = pro.ProjectId };
5
Colin Mackay
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>();
    }
}
3
user2383325

Was zurückgegeben wird, ist ein anonymer Typ. Erstellen Sie also eine neue Klasse mit 2 Feldern

class BasicProjectInfo {
   string name;
   string id;
}

und new BasicProjectInfo(pro.ProjectName, pro.ProjectId); zurückgeben. Ihre Methode gibt in diesem Fall einen List<BasicProjectInfo> zurück.

1
sh_kamalh

Der Rückgabewert Ihrer Methode muss ein List<Project> sein.

Mit select new erstellen Sie eine Instanz eines anonymen Typs anstelle einer Project.

1
Groo

versuchen Sie diese Lösung für mich, es funktioniert

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

Sie können es wie folgt tun:

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

    ProjectInfo(string n, long id)
    {
        name = n;   Id = id;
    }
}

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

         return query.ToList<ProjectInfo>();
    }
}
0
Husam Hilal