c# - Linq selecting from GroupBy -
i want select every group custom class , every item custom class,
i done this:
_notificationsmanager .getusernotifications(_repositorynotifications, _membershipprovider) .groupby(x => x.category) .select(g => new notificationsgroupdata { name = g.key, notifications = g.take(3).select(s => new notificationdata { category = g.key, text = s.text, time = datetime.now.subtract(s.time) }) }) here notificationsgroupdata:
public class notificationsgroupdata { public string name { get; set; } public ienumerable<notificationdata> notifications { get; set; } } and notificationdata:
public class notificationdata { public virtual timespan time { get; set; } public virtual string category { get; set; } public virtual string text { get; set; } } but when i'm trying create loop on i'm getting error: method or operation not implemented.
on line:
@foreach (var group in model.notifications) how can fix it?
uodate: updated code this:
_notificationsmanager.getusernotifications(_repositorynotifications, _membershipprovider) .groupby(x => x.category) .select(g => new { name = g.key, notifications = g.orderby(o => o.time) .take(3) .select(s => new { category = g.key, s.text, s.time }) }).asenumerable().select(g => new notificationsgroupdata { name = g.name, notifications = g.notifications .select(s => new notificationdata { category = g.name, text = s.text, time = - s.time }) }) and here error:
the method or operation not implemented. description: unhandled exception occurred during execution of current web request. please review stack trace more information error , originated in code. exception details: system.notimplementedexception: method or operation not implemented. source error: @foreach (var group in model.notifications) stack trace: [notimplementedexception: method or operation not implemented.] nhibernate.linq.groupby.nonaggregatinggroupbyrewriter.flattensubquery(subqueryexpression subqueryexpression, querymodel querymodel) +608 nhibernate.linq.groupby.nonaggregatinggroupbyrewriter.rewrite(querymodel querymodel) +598 nhibernate.linq.visitors.querymodelvisitor.generatehqlquery(querymodel querymodel, visitorparameters parameters, boolean root) +126 nhibernate.linq.nhlinqexpression.translate(isessionfactoryimplementor sessionfactory) +208 nhibernate.hql.ast.antlr.astquerytranslatorfactory.createquerytranslators(string queryidentifier, iqueryexpression queryexpression, string collectionrole, boolean shallow, idictionary`2 filters, isessionfactoryimplementor factory) +51 nhibernate.engine.query.hqlexpressionqueryplan.createtranslators(string expressionstr, iqueryexpression queryexpression, string collectionrole, boolean shallow, idictionary`2 enabledfilters, isessionfactoryimplementor factory) +100 nhibernate.engine.query.hqlexpressionqueryplan..ctor(string expressionstr, iqueryexpression queryexpression, string collectionrole, boolean shallow, idictionary`2 enabledfilters, isessionfactoryimplementor factory) +74 nhibernate.engine.query.hqlexpressionqueryplan..ctor(string expressionstr, iqueryexpression queryexpression, boolean shallow, idictionary`2 enabledfilters, isessionfactoryimplementor factory) +53 nhibernate.engine.query.queryplancache.gethqlqueryplan(iqueryexpression queryexpression, boolean shallow, idictionary`2 enabledfilters) +320 nhibernate.impl.abstractsessionimpl.gethqlqueryplan(iqueryexpression queryexpression, boolean shallow) +188 nhibernate.impl.abstractsessionimpl.createquery(iqueryexpression queryexpression) +164 nhibernate.linq.defaultqueryprovider.preparequery(expression expression, iquery& query, nhlinqexpression& nhquery) +152 nhibernate.linq.defaultqueryprovider.execute(expression expression) +70 nhibernate.linq.defaultqueryprovider.execute(expression expression) +59 remotion.linq.queryablebase`1.getenumerator() +128 system.linq.whereselectenumerableiterator`2.movenext() +61 asp._page_views_layout_notifications_cshtml.execute() in d:\dev\projects\adde\adde\views\layout\notifications.cshtml:21 system.web.webpages.webpagebase.executepagehierarchy() +197 system.web.mvc.webviewpage.executepagehierarchy() +103 system.web.webpages.webpagebase.executepagehierarchy(webpagecontext pagecontext, textwriter writer, webpagerenderingbase startpage) +88 system.web.mvc.razorview.renderview(viewcontext viewcontext, textwriter writer, object instance) +235 system.web.mvc.buildmanagercompiledview.render(viewcontext viewcontext, textwriter writer) +107 system.web.mvc.viewresultbase.executeresult(controllercontext context) +291 system.web.mvc.controlleractioninvoker.invokeactionresult(controllercontext controllercontext, actionresult actionresult) +13 system.web.mvc.<>c__displayclass1a.<invokeactionresultwithfilters>b__17() +23 system.web.mvc.controlleractioninvoker.invokeactionresultfilter(iresultfilter filter, resultexecutingcontext precontext, func`1 continuation) +245 system.web.mvc.<>c__displayclass1c.<invokeactionresultwithfilters>b__19() +22 system.web.mvc.controlleractioninvoker.invokeactionresultwithfilters(controllercontext controllercontext, ilist`1 filters, actionresult actionresult) +176 system.web.mvc.async.<>c__displayclass2a.<begininvokeaction>b__20() +75 system.web.mvc.async.<>c__displayclass25.<begininvokeaction>b__22(iasyncresult asyncresult) +99 system.web.mvc.async.wrappedasyncresult`1.end() +50 system.web.mvc.async.asynccontrolleractioninvoker.endinvokeaction(iasyncresult asyncresult) +27 system.web.mvc.<>c__displayclass1d.<beginexecutecore>b__18(iasyncresult asyncresult) +14 system.web.mvc.async.<>c__displayclass4.<makevoiddelegate>b__3(iasyncresult ar) +23 system.web.mvc.async.wrappedasyncresult`1.end() +55 system.web.mvc.controller.endexecutecore(iasyncresult asyncresult) +39 system.web.mvc.async.<>c__displayclass4.<makevoiddelegate>b__3(iasyncresult ar) +23 system.web.mvc.async.wrappedasyncresult`1.end() +55 system.web.mvc.controller.endexecute(iasyncresult asyncresult) +29 system.web.mvc.controller.system.web.mvc.async.iasynccontroller.endexecute(iasyncresult asyncresult) +10 system.web.mvc.<>c__displayclass8.<beginprocessrequest>b__3(iasyncresult asyncresult) +25 system.web.mvc.async.<>c__displayclass4.<makevoiddelegate>b__3(iasyncresult ar) +23 system.web.mvc.async.wrappedasyncresult`1.end() +55 system.web.mvc.mvchandler.endprocessrequest(iasyncresult asyncresult) +31 system.web.mvc.mvchandler.system.web.ihttpasynchandler.endprocessrequest(iasyncresult result) +9 system.web.mvc.<>c__displayclassa.<endprocessrequest>b__9() +22 system.web.mvc.<>c__displayclass4.<wrap>b__3() +10 system.web.mvc.serverexecutehttphandlerwrapper.wrap(func`1 func) +27 system.web.mvc.serverexecutehttphandlerwrapper.wrap(action action) +64 system.web.mvc.serverexecutehttphandlerasyncwrapper.endprocessrequest(iasyncresult result) +71 system.web.httpserverutility.executeinternal(ihttphandler handler, textwriter writer, boolean preserveform, boolean setpreviouspage, virtualpath path, virtualpath filepath, string physpath, exception error, string querystringoverride) +1464 [httpexception (0x80004005): error executing child request handler 'system.web.mvc.httphandlerutil+serverexecutehttphandlerasyncwrapper'.] system.web.httpserverutility.executeinternal(ihttphandler handler, textwriter writer, boolean preserveform, boolean setpreviouspage, virtualpath path, virtualpath filepath, string physpath, exception error, string querystringoverride) +3033503 system.web.httpserverutility.execute(ihttphandler handler, textwriter writer, boolean preserveform, boolean setpreviouspage) +76 system.web.httpserverutility.execute(ihttphandler handler, textwriter writer, boolean preserveform) +28 system.web.httpserverutilitywrapper.execute(ihttphandler handler, textwriter writer, boolean preserveform) +19 system.web.mvc.html.childactionextensions.actionhelper(htmlhelper htmlhelper, string actionname, string controllername, routevaluedictionary routevalues, textwriter textwriter) +463 system.web.mvc.html.childactionextensions.renderaction(htmlhelper htmlhelper, string actionname, string controllername) +35 asp._page_views_shared__layout_cshtml.execute() in d:\dev\projects\adde\adde\views\shared\_layout.cshtml:33 system.web.webpages.webpagebase.executepagehierarchy() +197 system.web.mvc.webviewpage.executepagehierarchy() +103 system.web.webpages.webpagebase.executepagehierarchy(webpagecontext pagecontext, textwriter writer, webpagerenderingbase startpage) +88 system.web.webpages.<>c__displayclass7.<renderpagecore>b__6(textwriter writer) +233 system.web.webpages.helperresult.writeto(textwriter writer) +10 system.web.webpages.webpagebase.write(helperresult result) +71 system.web.webpages.webpagebase.rendersurrounding(string partialviewname, action`1 body) +64 system.web.webpages.webpagebase.popcontext() +246 system.web.webpages.webpagebase.executepagehierarchy(webpagecontext pagecontext, textwriter writer, webpagerenderingbase startpage) +95 system.web.mvc.razorview.renderview(viewcontext viewcontext, textwriter writer, object instance) +235 system.web.mvc.buildmanagercompiledview.render(viewcontext viewcontext, textwriter writer) +107 system.web.mvc.viewresultbase.executeresult(controllercontext context) +291 system.web.mvc.controlleractioninvoker.invokeactionresult(controllercontext controllercontext, actionresult actionresult) +13 system.web.mvc.<>c__displayclass1a.<invokeactionresultwithfilters>b__17() +23 system.web.mvc.controlleractioninvoker.invokeactionresultfilter(iresultfilter filter, resultexecutingcontext precontext, func`1 continuation) +245 system.web.mvc.<>c__displayclass1c.<invokeactionresultwithfilters>b__19() +22 system.web.mvc.controlleractioninvoker.invokeactionresultwithfilters(controllercontext controllercontext, ilist`1 filters, actionresult actionresult) +176 system.web.mvc.async.<>c__displayclass2a.<begininvokeaction>b__20() +75 system.web.mvc.async.<>c__displayclass25.<begininvokeaction>b__22(iasyncresult asyncresult) +99 system.web.mvc.async.wrappedasyncresult`1.end() +50 system.web.mvc.async.asynccontrolleractioninvoker.endinvokeaction(iasyncresult asyncresult) +27 system.web.mvc.<>c__displayclass1d.<beginexecutecore>b__18(iasyncresult asyncresult) +14 system.web.mvc.async.<>c__displayclass4.<makevoiddelegate>b__3(iasyncresult ar) +23 system.web.mvc.async.wrappedasyncresult`1.end() +55 system.web.mvc.controller.endexecutecore(iasyncresult asyncresult) +39 system.web.mvc.async.<>c__displayclass4.<makevoiddelegate>b__3(iasyncresult ar) +23 system.web.mvc.async.wrappedasyncresult`1.end() +55 system.web.mvc.controller.endexecute(iasyncresult asyncresult) +29 system.web.mvc.controller.system.web.mvc.async.iasynccontroller.endexecute(iasyncresult asyncresult) +10 system.web.mvc.<>c__displayclass8.<beginprocessrequest>b__3(iasyncresult asyncresult) +25 system.web.mvc.async.<>c__displayclass4.<makevoiddelegate>b__3(iasyncresult ar) +23 system.web.mvc.async.wrappedasyncresult`1.end() +55 system.web.mvc.mvchandler.endprocessrequest(iasyncresult asyncresult) +31 system.web.mvc.mvchandler.system.web.ihttpasynchandler.endprocessrequest(iasyncresult result) +9 system.web.callhandlerexecutionstep.system.web.httpapplication.iexecutionstep.execute() +9629708 system.web.httpapplication.executestep(iexecutionstep step, boolean& completedsynchronously) +155
i suspect problem may in datetime.now.subtract(s.time) part, possibly combined use of notificationsgroupdata.
i suggest change query fetch data need without processing much, , perform more complex work locally using asenumerable. like:
// use single common idea of "now", don't re-evaluate each time var = datetime.now; var query = _notificationsmanager .getusernotifications(_repositorynotifications, _membershipprovider) .groupby(x => x.category) .select(g => new { name = g.key, notifications = g.take(3) .select(s => new { text = s.text, time = s.time }) }) .asenumerable() // force local evaluation final step .select(g => new notificationsgroupdata { name = g.name, notifications = g.notifications .select(s => new notificationdata { category = g.name, text = s.text, time = - s.time }) }); edit: okay, that's still giving problems, try doing everything post-grouping in-process:
var = datetime.now; var query = _notificationsmanager .getusernotifications(_repositorynotifications, _membershipprovider) .groupby(x => x.category) .asenumerable() // force local evaluation final step .select(g => new notificationsgroupdata { name = g.key, notifications = g.take(3) .select(s => new notificationdata { category = g.key, text = s.text, time = - s.time }) }); note far idea - it'll pull properties database, not ones want. (and not first 3 - although "first" depends on ordering too, hasn't been specified anywhere can see.) 1 of situations need fall sql, sound nhibernate doing more you...
Comments
Post a Comment