623 votos

Consulta LINQ en una tabla de datos

Estoy tratando de realizar una consulta LINQ en un objeto de la DataTable y extrañamente encuentro que realizar tales consultas en las DataTables 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 hacer que algo así funcione?

¡Me sorprende que las consultas de LINQ no estén permitidas en las Tablas de Datos!

822voto

Collin K Puntos 6535

No se puede consultar en contra de la DataTable 's Filas colección, ya que DataRowCollection no implementa IEnumerable<T> . Necesitas usar el AsEnumerable() extensión para DataTable . Así:

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

Y como dice Keith, tendrás que añadir una referencia a Extensiones de conjuntos de datos del sistema

AsEnumerable() retornos IEnumerable<DataRow> . Si necesitas convertir IEnumerable<DataRow> a un DataTable usa el CopyToDataTable() 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 dijo @ch00k:

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 es necesario añadir 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

Usar LINQ para manipular los datos en 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