623 votos

Consulta LINQ en un DataTable

Estoy tratando de realizar una consulta LINQ en un objeto DataTable y curiosamente me estoy dando cuenta de que la realización de estas consultas en las tablas de datos no es sencillo. Por ejemplo:

var results = from myRow in myDataTable
where results.Field("RowNo") == 1
select results;

Esto no está permitido. ¿Cómo puedo obtener algo como esto trabaja?

Estoy asombrado de que las consultas de LINQ no están permitidos en las tablas de datos!

822voto

Collin K Puntos 6535

Usted no puede consultar en contra de la DataTable's Filas de la colección, ya DataRowCollection no implementar IEnumerable<T>. Usted necesita utilizar el AsEnumerable() de extensión para DataTable. Así:

var results = from myRow in myDataTable.AsEnumerable()
where myRow.Field<int>("RowNo") == 1
select myRow;

Y como Keith dice, usted tendrá que agregar una referencia a System.Data.DataSetExtensions

AsEnumerable() devuelve IEnumerable<DataRow>. Si usted necesita para convertir IEnumerable<DataRow> a DataTable, el uso de la CopyToDataTable() de extensión.

46voto

JoelFan Puntos 11368
var results = from DataRow myRow in myDataTable.Rows
    where (int)myRow["RowNo"] == 1
    select myRow

29voto

Keith Puntos 46288

Como @ch00k dijo:

using System.Data; //needed for the extension methods to work

...

var results = 
    from myRow in myDataTable.Rows 
    where myRow.Field<int>("RowNo") == 1 
    select myRow; //select the thing you want, not the collection

También debe agregar una referencia de proyecto a System.Data.DataSetExtensions

21voto

Ravi Puntos 161
var query = from p in dt.AsEnumerable()
                    where p.Field<string>("code") == this.txtCat.Text
                    select new
                    {
                        name = p.Field<string>("name"),
                        age= p.Field<int>("age")                         
                    };

17voto

Salim Puntos 121

El uso de LINQ para manipular los datos en el DataSet/DataTable

var results = from myRow in tblCurrentStock.AsEnumerable()
              where myRow.Field<string>("item_name").ToUpper().StartsWith(tbSearchItem.Text.ToUpper())
              select myRow;
DataView view = results.AsDataView();

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X