asp.net - uso - LINQ to SQL-Cómo seleccionar columnas específicas y devolver la lista fuertemente tipada
sintaxis linq c# (2)
Básicamente lo estás haciendo de la manera correcta. Sin embargo, debe usar una instancia de DataContext
para consultar (no es obvio que DataContext
es una instancia o el nombre de tipo de su consulta):
var result = (from a in new DataContext().Persons
where a.Age > 18
select new Person { Name = a.Name, Age = a.Age }).ToList();
Aparentemente, la clase Person
es tu clase de entidad generada de LINQ a SQL. Debes crear tu propia clase si solo quieres algunas de las columnas:
class PersonInformation {
public string Name {get;set;}
public int Age {get;set;}
}
var result = (from a in new DataContext().Persons
where a.Age > 18
select new PersonInformation { Name = a.Name, Age = a.Age }).ToList();
Puede cambiar libremente var
con List<PersonInformation>
aquí sin afectar nada (ya que esto es lo que hace el compilador ).
De lo contrario, si está trabajando localmente con la consulta, le sugiero que considere un tipo anónimo:
var result = (from a in new DataContext().Persons
where a.Age > 18
select new { a.Name, a.Age }).ToList();
Tenga en cuenta que en todos estos casos , el result
está tipado estáticamente (su tipo es conocido en tiempo de compilación). El último tipo es una List
de una clase anónima generada por el compilador similar a la clase PersonInformation
que escribí arriba. A partir de C # 3.0, no hay tipeo dinámico en el idioma.
ACTUALIZAR:
Si realmente desea devolver una List<Person>
(que podría o no ser lo mejor que puede hacer), puede hacer esto:
var result = from a in new DataContext().Persons
where a.Age > 18
select new { a.Name, a.Age };
List<Person> list = result.AsEnumerable()
.Select(o => new Person {
Name = o.Name,
Age = o.Age
}).ToList();
También puede fusionar las declaraciones anteriores, pero las separé para mayor claridad.
Estoy tratando de usar LINQ to SQL para seleccionar algunas columnas específicas de una tabla y devolver el resultado como una lista de objetos fuertemente tipada.
Por ejemplo:
var result = (from a in DataContext.Persons
where a.Age > 18
select new Person
{
Name = a.Name,
Age = a.Age
}
).ToList();
Cualquier ayuda sería muy apreciada.
Construye bien, pero cuando lo ejecuto, obtengo el error. La construcción explícita del tipo de entidad MyEntity
en la consulta no está permitida.
El problema era, de hecho, que una de las propiedades era una relación con otra mesa. Cambié mi consulta LINQ para que pudiera obtener los mismos datos de un método diferente sin necesidad de cargar toda la tabla.
¡Gracias por toda tu ayuda!