2012-05-15 28 views
5

tengo que seleccionar la columna específica de mi DataTable utilizando LINQ estoy usando el código¿Cómo seleccionar una columna específica en LINQ?

ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23).CopyToDataTable(); 

~

Pero es que me da todas las columnas y necesito solamente PRODUCTNAME, descripción, precio

¿Cómo puedo escribir esta consulta?

Respuesta

4

Para ampliar un poco en @lazyberezovsky, puede utilizar una proyección de tipo anónimo para obtener todos los campos que desee:

ds.Table[0].AsEnumerable() 
    .Where<DataRow>(r => r.Field<int>("productID") == 23) 
    .Select(r => new { ProductName = r.Field<string>("productName"), 
         Description = r.Field<string>("description"), 
         Price = r.Field<decimal>("price") }); 

No sé qué nombre y escriba el nombre del producto, descripción, y los campos de precios son, por lo que tendrá que sustituirlos.

+0

Gracias. Funciona. Recibiste mi pregunta de forma clarividente y tu respuesta es la respuesta a mi pregunta. Ya sé cómo mostrar un campo pero no sé cómo mostrar 3 – user1390378

6

Uso Elija un método:

ds.Table[0].AsEnumerable() 
      .Where<DataRow>(r=>r.Field<int>("productID")==23) 
      .Select(r => r.Field<int>("productID")); 

ACTUALIZACIÓN: En caso de tener que seleccionar varias columnas, puede volver tipo anónimo:

var query = from row in dt.ds.Table[0].AsEnumerable() 
      where row.Field<int>("productID")==23 
      select new { 
          ProductID = x.Field<string>("productID"), 
          Foo = x.Field<string>("foo") 
         }; 

Si es necesario copiar los datos a la nueva tabla, se enfrentará al problema (CopyToDataTable requiere la colección de objetos DataRow). Ver How to: Implement CopyToDataTable Where the Generic Type T Is Not a DataRow para resolver este problema.

+0

Con esto puedo elegir solo una columna, pero tengo que elegir 3 – user1390378

Cuestiones relacionadas