Select distinct rows from datatable in Linq
Asked Answered
S

6

18

I am trying to get distinct rows based on multiple columns (attribute1_name, attribute2_name) and get datarows from datatable using Linq-to-Dataset.

Screenshot

I want results like this

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

Age                State
Age                weekend_percent
Age                statebreaklaw
Age                Annual Sales
Age                Assortment

How to do thin Linq-to-dataset?

Selfheal answered 14/7, 2010 at 2:5 Comment(0)
S
45

If it's not a typed dataset, then you probably want to do something like this, using the Linq-to-DataSet extension methods:

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

Make sure you have a using System.Data; statement at the beginning of your code in order to enable the Linq-to-Dataset extension methods.

Hope this helps!

Selfabuse answered 14/7, 2010 at 2:22 Comment(4)
I used attribute1_name there I am getting duplicate recordsSelfheal
@above You should use "row" during row.Field... I used some other datarow object in from my other loop which yielded me duplicate values.Later I corrected.Tharp
What if there are 4 columns in a row and you want to distinct based on 2 columns?Paulettepauley
How do I add an OrderBy for let's say column attribute2_name?Paralipomena
C
6

Like this: (Assuming a typed dataset)

someTable.Select(r => new { r.attribute1_name, r.attribute2_name }).Distinct();
Cappella answered 14/7, 2010 at 2:8 Comment(4)
Don't you still need the call to AsEnumerable()?Springspringboard
@Justin: Not for a typed dataset. Tables in typed datasets inherit TypedTableBase<TRow>, which implements IEnumerable<TRow>.Cappella
please provide me ... how iterate themSelfheal
@James: foreach(var pair in ...)Cappella
O
4
var Test = (from row in Dataset1.Tables[0].AsEnumerable()
            select row.Field<string>("attribute1_name") + row.Field<int>("attribute2_name")).Distinct();
Orthotropic answered 17/9, 2012 at 17:3 Comment(0)
H
2

Check this link

get distinct rows from datatable using Linq (distinct with mulitiple columns)

Or try this

var distinctRows = (from DataRow dRow in dTable.Rows
                    select new  {  col1=dRow["dataColumn1"],col2=dRow["dataColumn2"]}).Distinct();

EDIT: Placed the missing first curly brace.

Halliday answered 14/7, 2010 at 5:24 Comment(2)
@Cappella -Where should the curly brace go?Chardin
@MAW74656: Around the anonymous type.Cappella
C
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()
Comprehensible answered 23/4, 2013 at 14:18 Comment(1)
Welcome to Stack Overflow! Would you consider adding some narrative to explain why this code works, and what makes it an answer to the question? This would be very helpful to the person asking the question, and anyone else who comes along.Percival
C
0

We can get the distinct similar to the example shown below

 //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();
Cyndycynera answered 16/12, 2015 at 13:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.