2010-07-14 13 views
11

Ich versuche, verschiedene Zeilen basierend auf mehreren Spalten (attribute1_name, attribute2_name) zu erhalten und Datarows aus Datentabelle mit Linq-to-Dataset abrufen.Wählen Sie eindeutige Zeilen aus Datentabelle in Linq

Screenshot

Ich will Ergebnisse wie dieses

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

Age    State 
Age    weekend_percent 
Age    statebreaklaw 
Age    Annual Sales 
Age    Assortment 

Wie dünn Linq-to-Daten-Set zu tun?

Antwort

32

Wenn es nicht eine typisierte Datasets ist, dann möchten Sie wahrscheinlich so etwas wie dies zu tun, mit den Linq-to-DataSet Erweiterungsmethoden:

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

Stellen Sie sicher, dass Sie eine using System.Data;-Anweisung am Anfang Ihres Codes haben, um die Linq-to-Dataset-Erweiterungsmethoden zu aktivieren.

Hoffe, das hilft!

+0

Ich verwendete attribute1_name dort erhalte ich doppelte Datensätze – James123

+0

@above Sie sollten "row" während row.Field verwenden .. Ich habe ein anderes Datenobjekt aus meiner anderen Schleife verwendet, das mir doppelte Werte lieferte. Später korrigierte ich. – Hari

+0

Was ist, wenn 4 Spalten hintereinander stehen und Sie sich auf 2 Spalten beziehen möchten? – Jogi

4

wie folgt aus: (eine typisierte Datasets Angenommen)

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

gezeigt zum Beispiel bekommen Sie nicht noch Sie den Anruf AsEnumerable benötigen()? –

+0

@Justin: Nicht für ein typisiertes Dataset. Tabellen in typisierten Datasets erben 'TypedTableBase ', die 'IEnumerable ' implementiert. – SLaks

+0

bitte geben Sie mir ... wie sie iterieren – 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

Willkommen bei Stack Overflow! Würden Sie darüber nachdenken, etwas zu erzählen, um zu erklären, warum dieser Code funktioniert und was macht ihn zu einer Antwort auf die Frage? Dies wäre sehr hilfreich für die Person, die die Frage stellt, und für alle anderen, die mitkommen. –

0

Wir können die deutliche ähnlich unter

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