.net - C# LINQ Lambda multiple group of IEnumerable with Sum() -


i have collection of data = ienumerable<analyticsdata> , i'm trying group multiple properties , sum() on integer column. end result collection of analyticsreportrow<dynamic>() can see below, though isn't highly relevant.

in final select() method, want pass object in, ideally original set , prefer not recreate 1 in middle of chained queries if possible. of examples seem create either new strongly-typed or dynamic object pass next link in chain.

here's have spent few hours trying work with, , returns set in first code block below rows (i export csv, hence formatting):

var pageviewsdata = analyticsdata.groupby(data => new { g1 = data.webproperty, pv = data.pageviews, d = data })     .groupby(data => new { gg1 = data.key.g1, dd = data.key.d })     .select(data => new analyticsreportrow<dynamic>(data.key.dd, "page_views", data.sum(datas => datas.key.pv))); 

result this:

"customera","","","","","page_views",0,"a1-810","","",2,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"a1-810","","",2,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-n8013","","",2,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-p3113","","",7,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-p3113","","",2,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-p3113","","",3,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-p3113","","",3,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-p3113","","",2,"4/10/2015 16:08:33" 

and end sum() on second-last column, grouped customer , device. example:

"customera","","","","","page_views",0,"a1-810","","",4,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-n8013","","",2,"4/10/2015 16:08:33" "customera","","","","","page_views",0,"gt-p3113","","",16,"4/10/2015 16:08:33" 

i having hard time wrapping head around logic , use example of how group this, pseudocode , dynamic types.

thank you.

after spending several hours on today, , posting question, decided try few more things , read more documentation on groupby().

as turns out, missing fact can provide key selector , element selector groupby method as explained in msdn documentation. if understand correctly, provides ability have distinct qualifier tells query how group.

in end, appears give me need. feedback on make sure i'm going correctly:

var pageviewsdata = analyticsdata.where(data => data.pageviews > 0)   .groupby(data => new { g1 = data.webproperty, g2 = data.devicemodel }, data => data)   .select(data => new analyticsreportrow<dynamic>(data.firstordefault(), "page_views", data.sum(d => d.pageviews))); 

Popular posts from this blog