{"id":2933,"date":"2019-11-25T15:59:35","date_gmt":"2019-11-25T14:59:35","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=2933"},"modified":"2022-07-25T08:33:24","modified_gmt":"2022-07-25T07:33:24","slug":"c-linq-group-by-multiple-columns","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-linq-group-by-multiple-columns\/","title":{"rendered":"C# linq group by multiple columns"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public async Task&lt;IEnumerable&lt;Measurement>> GetLastMeasurementForEachSensor()\n{\n\tvar groupedMaxDateTime = AsQueryable()\n\t\t.GroupBy(m => m.SensorId)\n\t\t.Select(m => new\n\t\t{\n\t\t\tSensorId = m.Key,\n\t\t\tSensorDateTime = m.Max(y => y.SensorDateTime)\n\t\t});\n\tvar dmMeasurements = await AsQueryable()\n\t\t.Join(groupedMaxDateTime,\n\t\t\t(DmMeasurement a) => new { a.SensorId, a.SensorDateTime },\n\t\t\tb => new { b.SensorId, b.SensorDateTime },\n\t\t\t(a, b) => a\n\t\t)\n\t\t.Select(x => new DmMeasurement {\n\t\t\tSensorId = x.SensorId,\n\t\t\tReceivedAt = x.ReceivedAt,\n\t\t\tReceivedValue = x.ReceivedValue\n\t\t})\n\t\t.ToListAsync();\n\treturn dmMeasurements.Select(x => x.ToDomain(true));\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,4,1],"tags":[],"class_list":["post-2933","post","type-post","status-publish","format-standard","hentry","category-dotnet","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=2933"}],"version-history":[{"count":2,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2933\/revisions"}],"predecessor-version":[{"id":2935,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2933\/revisions\/2935"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=2933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=2933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=2933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}