2010-07-14 3 views
11

J'essaie d'obtenir des lignes distinctes basées sur plusieurs colonnes (attribute1_name, attribute2_name) et d'obtenir des datarows de datatable en utilisant Linq-to-Dataset.Sélection de lignes distinctes à partir de datable dans Linq

Screenshot

Je veux des résultats comme celui-ci

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

Age    State 
Age    weekend_percent 
Age    statebreaklaw 
Age    Annual Sales 
Age    Assortment 

Comment faire mince Linq-à-ensemble de données?

Répondre

32

Si ce n'est pas un ensemble de données typé, alors vous voudrez probablement faire quelque chose comme cela, en utilisant les méthodes d'extension 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(); 

Assurez-vous d'avoir une instruction using System.Data; au début de votre code afin d'activer les méthodes d'extension Linq-to-Dataset.

Espérons que cela aide!

+0

J'ai utilisé attribut1_name là je reçois des enregistrements en double – James123

+0

@ dessus Vous devriez utiliser "row" pendant row.Field .. J'ai utilisé un autre objet de datarow de mon autre boucle qui m'a donné des valeurs en double. Plus tard j'ai corrigé. – Hari

+0

Que faire s'il y a 4 colonnes dans une rangée et que vous voulez distinct basé sur 2 colonnes? – Jogi

4

Comme ceci: (En supposant un DataSet typé)

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

Ne vous avez encore l'appel à AsEnumerable()? –

+0

@Justin: Pas pour un jeu de données typé. Les tables des jeux de données typés héritent de 'TypedTableBase ', qui implémente 'IEnumerable '. – SLaks

+0

s'il vous plaît me fournir ... comment les itérer – 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

Bienvenue dans Stack Overflow! Envisageriez-vous d'ajouter un récit pour expliquer pourquoi ce code fonctionne, et qu'est-ce qui en fait une réponse à la question? Cela serait très utile à la personne qui pose la question et à toute personne qui se présente. –

0

Nous pouvons obtenir le similaire à l'exemple illustré ci-dessous distinct

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