2010-07-14 24 views
11

Sto cercando di ottenere righe distinte basate su più colonne (attribute1_name, attribute2_name) e ottenere datarows da datatable usando Linq-to-Dataset.Seleziona righe distinte da datatable in Linq

Screenshot

Voglio risultati come questo

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

Age    State 
Age    weekend_percent 
Age    statebreaklaw 
Age    Annual Sales 
Age    Assortment 

Come fare dataset LINQ-to-sottile?

risposta

32

Se non è un DataSet tipizzato, allora probabilmente vuole fare qualcosa di simile, utilizzando i metodi di estensione LINQ to DataSet:

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

Assicurarsi di avere un'istruzione using System.Data; all'inizio del codice per abilitare i metodi di estensione da Linq a Dataset.

Spero che questo aiuti!

+0

Ho usato attribute1_name lì sto ricevendo record duplicati – James123

+0

@above Dovresti usare "row" durante row.Field .. Ho usato qualche altro oggetto Datarow dal mio altro ciclo che mi ha restituito valori duplicati. Più tardi ho corretto. – Hari

+0

Cosa succede se ci sono 4 colonne in una riga e vuoi distinguere in base a 2 colonne? – Jogi

4

Ti piace questa: (Assumendo un dataset tipizzato)

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

Non hai ancora bisogno la chiamata a AsEnumerable()? –

+0

@Justin: non per un set di dati tipizzato. Le tabelle nei set di dati digitati ereditano 'TypedTableBase ', che implementa 'IEnumerable '. – SLaks

+0

per favore forniscimi ... come li itera – 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

Benvenuti in Stack Overflow! Prenderesti in considerazione l'aggiunta di alcune narrative per spiegare perché questo codice funziona e cosa ne fa una risposta alla domanda? Questo sarebbe molto utile per la persona che fa la domanda e per chiunque altro venga. –

0

possiamo ottenere il distinto simile all'esempio mostrato qui sotto

//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();