entity framework - Linq woes - A CollectionType is required -
why doesn't linq query work?
i suspect may have lazy loading. seems work in linqpad.
public ilist<paymentdto> getdocumentpayments(int documentid, bool? allowrepeatpayments, byte[] paymentstatuses, int[] paymentmethods) { using (var ctx = objectcontextmanager<mydatacontext>.getmanager("mydatacontext")) { var payments = new list<paymentdto>(); var ps = new list<byte>(); if (paymentstatuses != null) { ps = paymentstatuses.tolist(); } var pm = new list<int>(); if (paymentmethods != null) { pm = paymentmethods.tolist(); } iqueryable<payment> data = payment in ctx.objectcontext.documents.oftype<payment>() ps.contains(payment.status) && pm.contains(payment.method) && payment.documentid == documentid && (allowrepeatpayments == null || payment.allowrepeatpayments == allowrepeatpayments) orderby payment.id select payment; foreach (var p in data) // fails here { payments.add(readdata(p)); } return payments; } } throws error: a collectiontype required. parameter name: collectiontype.
constructs (allowrepeatpayments == null || payment.allowrepeatpayments == allowrepeatpayments) can funny thing query. try happens when do:
if (allowrepeatpayments.hasvalue) { data = data.where(p => p.allowrepeatpayments == allowrepeatpayments); } you can same paymentstatuses , paymentmethods.
it may solve problem, if not, improvement anyway, because condition added when necessary , sql not cluttered when isn't.
Comments
Post a Comment