© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•12mo ago•
2 replies
Canyon

✅ LINQ help: IQueryable<Entity> -> Dictionary<string, Entity[]>

Hi, all:

I'm looking for some help in writing a LINQ query. I'm interested in creating a dictionary where the keys are
LogDatum.SerialNumber
LogDatum.SerialNumber
(nullable string), and the values are an array of the hourly maximum of
LogDatum.Current
LogDatum.Current
(nullable double). This means I'm looking for an array whose elements are the maximum
LogDatum
LogDatum
of a certain hour. A sample of a dictionary I'm looking for:
Dictionary<string, LogDatum[]> myDict = new() {
    {
        "serial 1",
        [
            <LogDatum with max Current at "2025-01-01 09">,
            <LogDatum with max Current at "2025-01-01 10">,
            <LogDatum with max Current at "2025-01-01 11">,
            <LogDatum with max Current at "2025-01-01 13">,
            <LogDatum with max Current at "2025-01-01 14">,
        ]
    },
};
Dictionary<string, LogDatum[]> myDict = new() {
    {
        "serial 1",
        [
            <LogDatum with max Current at "2025-01-01 09">,
            <LogDatum with max Current at "2025-01-01 10">,
            <LogDatum with max Current at "2025-01-01 11">,
            <LogDatum with max Current at "2025-01-01 13">,
            <LogDatum with max Current at "2025-01-01 14">,
        ]
    },
};


My entity (generated by EF scaffolding) has an abbreviated definition of:
public class LogDatum
{
    public long? Pk { get; set; }
    public string? SerialNumber { get; set; }
    public DateTime? Timestamp { get; set; }
    public double? Current { get; set; }
}
public class LogDatum
{
    public long? Pk { get; set; }
    public string? SerialNumber { get; set; }
    public DateTime? Timestamp { get; set; }
    public double? Current { get; set; }
}


I have a query that starts to get me there:
var res = await _nktContext.LogData
    .Where(data => data.Timestamp != null && data.Timestamp.Value >= dateStart && data.Timestamp.Value <= dateEnd)
    .GroupBy(data => new { data.SerialNumber, Hour = data.Timestamp!.Value.ToString("yyyy-MM-dd HH") })
    .ToDictionaryAsync(
        grouping => grouping.Key.SerialNumber ?? "N/A",
        grouping => grouping.ToArray()
    );
var res = await _nktContext.LogData
    .Where(data => data.Timestamp != null && data.Timestamp.Value >= dateStart && data.Timestamp.Value <= dateEnd)
    .GroupBy(data => new { data.SerialNumber, Hour = data.Timestamp!.Value.ToString("yyyy-MM-dd HH") })
    .ToDictionaryAsync(
        grouping => grouping.Key.SerialNumber ?? "N/A",
        grouping => grouping.ToArray()
    );

However this gets me all the grouped by an hour, which of course is caused by
grouping => grouping.ToArray()
grouping => grouping.ToArray()
, but I'm not clever enough to get the rest of the way there. Any help or tips appreciated, thanks!
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources

Similar Threads

Was this page helpful?
Recent Announcements

Similar Threads

Entity Framework IQueryable question
C#CC# / help
2y ago
❔ Help with Dictionary<string,string>
C#CC# / help
3y ago
❔ XMLAttributeCollection -> Dictionary with LINQ?
C#CC# / help
3y ago
LINQ help
C#CC# / help
2y ago