views:

83

answers:

1

I'm struggling with a (usually simple to deal with) problem.

I have a database containing a "measurements" table. Each measurement has a timestamp (datetime), a value (decimal), a measurement type (foreign key to a lookup table) and belongs to a "capacity item" (a master table).

I imported the SQL database in Entity Framework and created a model out of it. Now I want to query for the base line. A base line is the current status of the capacity item, and is represented by the latest measurements for each type of that particular capacity item.

So what the query needs to return is: for a certain CapacityItem, give me the latest measurement of each measurement type. In an SQL query I would do a "group by" on the measurement type and do a MAX() on the timestamp. But in Linq-2-Entities I seem to be swinning in the mud. I need a function that returns IQueryable<Measurement>, containing all baseline measurements, but my queries all return some sort of anonymous type that's impossible to typecast.

I hope I made myself clear. When I re-read this, I can image it doesn't make much sense. But I have been looking at this far too long, and my mind starts doing funny things :-)

Anyone here that can get me in the right direction? Please ask for clarification if needed.

Thanks a million in advance.

~Rob

+2  A: 

Something like:

var q = from m in Context.Measurements
        group m by m.MeasurementType.Id into group
        from bl in group
        where bl.TimeStamp == group.Max(g => g.TimeStamp)
        select bl;

This is off the top of my head and guessing about your DB. You may have to tweak it.

Craig Stuntz
You were almost spot on! There's a bug in the grouping (you cannot name a group 'group') and I had to add a Where clause for filtering out the desired Capacity Item, but the general idea is exactly what I needed. It took you 5 minutes? I wish I asked you 24 hours ago :-)
Rob Vermeulen