Lista de devolución usando seleccionar nuevo en LINQ

Este es mi método que me da error.

public List 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 lo cambio con esto:

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

Entonces funciona bien, no hay error.

¿Podrías decirme cómo puedo devolver solo ProjectId y ProjectName?

Gracias.

El método no puede devolver el tipo anónimo. Tiene que ser el mismo que el tipo definido en el tipo de devolución del método. Compruebe la firma de GetProjectForCombo y vea qué tipo de devolución ha especificado.

Cree una clase ProjectInfo con las propiedades requeridas y luego en una nueva expresión cree el objeto de tipo ProjectInfo.

 class ProjectInfo { public string Name {get; set; } public long Id {get; set; } } public List 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(); } } 
 public List GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = db.Project .Select,ProjectInfo>(p=> return new ProjectInfo{Name=p.ProjectName, Id=p.ProjectId); return query.ToList(); } 

}

No puede devolver tipos anónimos de una clase … (Bueno, puede, pero primero tiene que lanzarlos para objetar y luego usar la reflexión del otro lado para obtener los datos nuevamente) por lo que debe crear una clase pequeña para los datos que se incluirán dentro

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

Luego en tu statement LINQ:

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

Lo que se devuelve es un tipo anónimo, así que crea una nueva clase con 2 campos

 class BasicProjectInfo { string name; string id; } 

y devuelve un new BasicProjectInfo(pro.ProjectName, pro.ProjectId); . List método en este caso devolverá una List

El valor de retorno de su método debe ser una List .

Al usar select new está creando una instancia de un tipo anónimo, en lugar de un Project .

Puedes hacerlo de la siguiente manera:

 class ProjectInfo { public string Name {get; set; } public long Id {get; set; } ProjectInfo(string n, long id) { name = n; Id = id; } } public List 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(); } } 

prueba esta solución para mí funciona

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

Está creando un nuevo tipo de objeto, por lo tanto, es anónimo. Puedes devolver una dinámica.

 public dynamic GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = from pro in db.Projects select new { pro.ProjectName, pro.ProjectId }; return query.ToList(); } }