Pure.Krome
Pure.Krome

Reputation: 86967

How can I return the Value from a .NET IGrouping via a Key?

I'm struggling to figure out how to retrieve the Value part of an IGrouping instance.

I have the following:

IList<IGrouping<string, PurchaseHistory> results = someList.GroupBy(x => x.UserName);

And I now wish to iterate through each collection and retrieve the purchase histories for that user (and check if some stuff exists in the collection of purchase histories).

Upvotes: 5

Views: 6125

Answers (3)

user11523568
user11523568

Reputation:

Calling..

IList<IGrouping<string, PurchaseHistory> results = someList
    .GroupBy(x => x.UserName);
    .Select(result => (result.Key, result.Any(SomeStuffExists)));

With..

bool SomeStuffExists(PurchaseHistory item)
{
    return ..
}

Yields tuples in the likes of..

  • ("UserNameX", true)
  • ("UserNameY", false)
  • ..

Upvotes: 0

Lali
Lali

Reputation: 2866

This is the way if you want to iterate through all the items

foreach (IGrouping<int, YourClass> value in result)
{
    foreach (YourClass obj in value)
    {
      //Some Code here          
    }
}

And this is the way if you want to search some thing by key

List<YourClass> obj1 = result.Where(a => a.Key 
== 12).SingleOrDefault().Where(b=>b.objId.Equals(125)).ToList();

(Key is considered as 'int' in this case)

Upvotes: -2

fubo
fubo

Reputation: 45947

how about a nested loop?

IList<IGrouping<string, PurchaseHistory>> results = someList.GroupBy(x => x.UserName);

foreach (IGrouping<string, PurchaseHistory> group in results)
{
    foreach (PurchaseHistory item in group)
    {
        CheckforStuff(item);
    }
}

or one loop with linq statement

IList<IGrouping<string, PurchaseHistory>> results = someList.GroupBy(x => x.UserName);
foreach (IGrouping<string, PurchaseHistory> group in results)
{
    bool result = group.Any(item => item.PurchasedOn > someDate);
}

Upvotes: 6

Related Questions