Tengo un datatable donde yo estoy tratando de hacer
datatable.Seleccione(Nombre Like ‘#%#’) pero recibiendo el error de que no válidos patrón(esperando el resultado de una tabla con el nombre de col tener #Mike#,#Cejas#..). El uso de escapar sequense fuerza para todos los elementos de la fuerza de trabajo bien también. Muchos sugieren el uso de Linq – pero soy nuevo en esto. Cómo puedo hacer este filtro con Linq a partir de esta tabla de datos.

Esta es una muestra de lo que yo estaba tratando de hacer..

 Dim dtSamp As Data.DataTable
    dtSamp = New Data.DataTable
    dtSamp.Columns.Add("Name")
    dtSamp.Columns.Add("Marks")

    Dim dr As DataRow
    dr = dtSamp.NewRow()
    dr.Item(0) = "AAA"
    dr.Item(1) = "50"
    dtSamp.Rows.Add(dr)
    dr = dtSamp.NewRow()
    dr.Item(0) = "#bbb#"
    dr.Item(1) = "60"
    dtSamp.Rows.Add(dr)
    dr = dtSamp.NewRow()
    dr.Item(0) = "ccc"
    dr.Item(1) = "44"
    dtSamp.Rows.Add(dr)

    Dim drResult As DataRow()
    drResult = dtSamp.Select("Name Like '#%#'")

    Dim dtOutPutTable As Data.DataTable
    dtOutPutTable = drResult.CopyToDataTable()

En el dtOutPutTable yo estaba esperando 1 fila ie, #bbb# en ella.. pero la función de selección de falla.

InformationsquelleAutor user1066231 | 2012-09-05

2 Comentarios

  1. 3

    Generalmente las consultas de LINQ obras en las fuentes de datos que implementan la IEnumerable<T>/IQueryable<T> Interface. Pero DataTable no implementa ninguna de estas. Así que no podemos aplicar directamente las consultas de LINQ en una tabla de datos.

    Pero la clase DataTable tiene una extensión método llamado AsEnumerable que devuelve un IEnumerable colección de DataRow. Así que podemos aplicar la AsEnumerable función en una tabla de datos y, a continuación, jugar con algunos de LINQ en la colección resultante.

    var items=(from p in myDataTable.AsEnumerable()
                     select new { ID= p.Field<int>("ID").
                                  Name=p.Field<string>("Name")
                               }).ToList();
    var filtered=items.Where(x => x.Name.Contains("Mike"));

    EDICIÓN : Aquí es el VB.NET Versión ( Descargo de responsabilidad: yo no soy un VB.NET chico. pero yo podría construir este código sin ningún error)

    Dim items = (From p In myDataTable.AsEnumerable() 
                   Select New With {.ID = p.Field(Of Integer)("ID"),
                                    .Name = p.Field(Of String)("Name")}).ToList()
    
    Dim filtered = items.Where(Function(x) x.Name.Contains("Mike")).ToList()
    • VB.NET está etiquetado. Por cierto, en VB.NET AsEnumerable no es necesario.
    • Ah ! Permítanme volver con el VB.NET versión.
    • esperando ansiosamente.. 🙂
    • ver la edición
    • Gracias. Que fue de gran utilidad. También entendí por qué de que Como no estaba trabajando en la instrucción Select., Como opearton canot tiene 2 condiciones: iniciar con y termina con. Puede que uno de los dos. Pero puede ser de 2 condiciones, solo es empezar, y el otro que termina con: //VB: Dim drResult Como DataRow() = dtSamp.Seleccione(«Nombre Like ‘#%’ Y el Nombre Like ‘%#'»)
  2. 0

    VB

    Private Function likes(ByVal dt As DataTable, ByVal column As String, ByVal value As String)
        Dim result = dt.Clone()
        For Each row As DataRow In From row1 As DataRow In dt.Rows Where (row1(column).Contains(value))
            result.ImportRow(row)
        Next
        Return result
    End Function

    C#

    private DataTable likes(ref DataTable dt, string column, string value)
     {
        DataTable result = dt.Clone();
        foreach (DataRow row in from row1 in dt.Rowswhere (row1(column).Contains(value))) {
            result.ImportRow(row);
        }
        return result;
     }

Dejar respuesta

Please enter your comment!
Please enter your name here