Abhi.Net
Abhi.Net

Reputation: 772

Linq query to with SortedList<int,list<int>>

I am currently using Linq to retrieve a list of distinct values from my data table. I am then looping through the list and again calling a linq query to retrieve a list of values for each value in the first list.

_keyList = new SortedList<int, List<int>>();
var AUGroupList = ProcessSummaryData.AsEnumerable()
                  .Select(x => x.Field<int>("AUGroupID"))
                  .Distinct()
                  .ToList<int>();
foreach (var au in AUGroupList)
{
    var AUList = ProcessSummaryData.AsEnumerable()
                      .Where(x => x.Field<int>("AUGroupID") == au)
                      .Select(x => x.Field<int>("ActivityUnitID"))
                      .ToList<int>();
    _keyList.Add(au, AUList);
}

I am then adding the value to a sorted list along with the corresponding second list. How can I combine the above two queries into one Linq query so that I don't have to call them separately?

Upvotes: 0

Views: 1187

Answers (2)

Dmitry S.
Dmitry S.

Reputation: 8513

You should be able to do something like:

var groupQuery = from d in ProcessSummary.AsEnumerable()
                 group d by new { Key = d.Field<int>("AUGroupID") } into g
                 select new { GroupID = g.Key, Values = g.Distinct().ToList() }; 

Then you can loop through the groupQuery and populate the sorted list. The Key property will contain the group id, and the Values property will have a distinct list of values.

Upvotes: 2

cirrus
cirrus

Reputation: 5672

Have you tried this?

var _keyList = new SortedList<int, List<int>>();
var AUGroupList = ProcessSummaryData.AsEnumerable()
                  .Select(x => x.Field<int>("AUGroupID"))
                  .Distinct()
                     .Where(x => x.Field<int>("AUGroupID") == au)
                     .Select(x => x.Field<int>("ActivityUnitID"))
                     .ToList<int>();
    _keyList.Add(au, AUList);
}

Your provider should cope with that, if not there's a few other ways.

Upvotes: 1

Related Questions