2010-07-14 41 views
11

Estoy tratando de obtener filas distintas en función de múltiples columnas (attribute1_name, attribute2_name) y obtener datarows de datatable utilizando Linq-to-Dataset.Seleccionar filas distintas de datatable en Linq

Screenshot

Quiero resultados como este

attribute1_name attribute2_name 
--------------  --------------- 

Age    State 
Age    weekend_percent 
Age    statebreaklaw 
Age    Annual Sales 
Age    Assortment 

Cómo hacer conjunto de datos LINQ-a-delgada?

Respuesta

32

Si no es un conjunto de datos con tipo, entonces es probable que quieren hacer algo como esto, utilizando los métodos de extensión LINQ a BASE DE DATOS:

var distinctValues = dsValues.AsEnumerable() 
         .Select(row => new { 
          attribute1_name = row.Field<string>("attribute1_name"), 
          attribute2_name = row.Field<string>("attribute2_name") 
         }) 
         .Distinct(); 

Asegúrese de tener una declaración using System.Data; al comienzo de su código para habilitar los métodos de extensión Linq-to-Dataset.

Espero que esto ayude!

+0

Utilicé attribute1_name allí obtengo registros duplicados – James123

+0

@above Debería usar "row" durante la fila. Campo .. Utilicé algún otro objeto de datarow de mi otro ciclo que me dio valores duplicados. Luego lo corregí. – Hari

+0

¿Qué sucede si hay 4 columnas seguidas y desea diferenciar en función de 2 columnas? – Jogi

4

De esta manera: (Asumiendo un conjunto de datos mecanografiado)

someTable.Select(r => new { r.attribute1_name, r.attribute2_name }).Distinct(); 
+0

no ¿Todavía necesita la llamada a AsEnumerable()? –

+0

@Justin: No para un conjunto de datos tipeados. Las tablas en datasets tipeados heredan 'TypedTableBase ', que implementa 'IEnumerable '. – SLaks

+0

por favor bríndenme ... cómo repetirlos – James123

3
var Test = (from row in Dataset1.Tables[0].AsEnumerable() 
      select row.Field<string>("attribute1_name") + row.Field<int>("attribute2_name")).Distinct(); 
0
Dim distinctValues As List(Of Double) = (From r In _ 
DirectCast(DataTable.AsEnumerable(),IEnumerable(Of DataRow)) Where (Not r.IsNull("ColName")) _ 
Select r.Field(Of Double)("ColName")).Distinct().ToList() 
+3

¡Bienvenido a Stack Overflow! ¿Consideraría agregar alguna narración para explicar por qué funciona este código y qué hace que sea una respuesta a la pregunta? Esto sería muy útil para la persona que hace la pregunta y para cualquier otra persona que se presente. –

0

podemos obtener el distintivo similar al ejemplo que se muestra a continuación

//example 
      var distinctValues = DetailedBreakDown_Table.AsEnumerable().Select(r => new 
      { 
       InvestmentVehicleID = r.Field<string>("InvestmentVehicleID"), 
       Universe = r.Field<string>("Universe"), 
       AsOfDate = _imqDate, 
       Ticker = "", 
       Cusip = "", 
       PortfolioDate = r.Field<DateTime>("PortfolioDate") 

      }).Distinct(); 
Cuestiones relacionadas