Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get first item of IGrouping

Tags:

c#

ienumerable

IEnumerable<IGrouping<long, MyClass>> datas = list.GroupBy(x => x.PropertyXYOfMyClass);

// get all items from each group
foreach (var grouping in datas)
{
    long groupKey = groupingByMyClass.Key;

    //iterating through values
    foreach (var item in groupingByMyClass)
    {
        long key = item.PropertyIntOfClassA;
        string property = item.PropertyA;
    }
}

Each group contains some items, wow to get values from first item of each group?

UPDATE

void Extract()
{
    List<DataHolder> data = new List<DataHolder>();
    List<DateTime> randomTimes = new List<DateTime>();
    Random r = new Random();
    DateTime d = new DateTime(2019, 9, 19, 7, 0, 0);

    for (int i = 0; i < 100; i++)
    {
        DataHolder dh = new DataHolder();
        TimeSpan t = TimeSpan.FromSeconds(r.Next(0, 14400));  
        dh.OID = i;
        dh.Value = r.Next(50);
        dh.Snapshottime = d.Add(t);

        data.Add(dh);
     }

data.OrderBy(o => o.Snapshottime).ToList();

List<DataHolder> SortedList = data.OrderBy(o => o.Snapshottime).ToList();           

TimeSpan interval = new TimeSpan(0, 15, 0);
var result = SortedList.GroupBy(x => x.Snapshottime.Ticks / interval.Ticks) .OrderBy(x => x.Key);
}

public class DataHolder
{
    public int OID { get; set; }
    public double Value { get; set; }
    public DateTime Snapshottime { get; set; }       
}

Here from result i need to take first item from each group.

like image 701
Josef Avatar asked Nov 23 '25 03:11

Josef


1 Answers

try this:

var finalResult = result.Select(gpr=>grp.First());

or if you want the earliest/Latest/etc you could order by first:

var finalResult = result.Select(gpr=>grp.OrderBy(x=>x.SnapShotTime).First());
like image 77
GPW Avatar answered Nov 24 '25 18:11

GPW



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!