c# - Linq lambda entities , does not contain definition -
i have query code here :
//get records based on activityid , taskid. public ilist<model.questionhint> getrecords1(int listtask, int listactivity) { ilist<model.questionhint> lstrecords = context.questionhints.tolist(); return lstrecords.groupby(x => new { x.questionno, x.activityid, x.taskid }).where(a => a.taskid == listtask && a.activityid == listactivity).tolist(); }
the error lies in .where
statement, says not contain definition activityid
, taskid
.
full error :
'system.linq.igrouping' not contain definition 'activityid' , no extension method 'activityid' accepting first argument of type 'system.linq.igrouping' found (are missing using directive or assembly reference?)
i weak in query statements, want retrieve records database activity id = , task id = , group them questionno, activityid , task id .
the simplest fix here is: filter (where) before group; reduce work grouping has do:
return context.questionhints .where(a => a.taskid == listtask && a.activityid == listactivity) .groupby(x => new { x.questionno, x.activityid, x.taskid }) .tolist();
the reason isn't working in original code is, mentioned, groupby
returns sequence of groups - each of has .key
(your anonymous type) , ienumerable<t>
sequence of items in group.
however! method claims return ilist<model.questionhint>
; grouped data not, , never be, ilist<model.questionhint>
- ilist<igrouping<{some anonymous type, model.questionhint>>
. so: cannot group if claiming ilist<model.questionhint>
- , since grouping anonymous type, can't change return type match. have 2 choices:
- don't group
- group declarable (a custom type, or
tuple<...>
), , change return type match
for example:
public ilist<igrouping<tuple<int,int,int>,model.questionhint>> getrecords1(int listtask, int listactivity) { return context.questionhints .where(a => a.taskid == listtask && a.activityid == listactivity) .groupby(x => tuple.create(x.questionno, x.activityid, x.taskid)) .tolist(); }
Comments
Post a Comment