c# - Linq Enumeration Error -
i getting users posted form data, might empty.
var users = request.form.getvalues("users[]") == null ? null : request.form.getvalues("users[]").toarray(); so, users becomes null if empty. but, following linq query not work.
var submissions = db.quicksearchviews.where(x => (users != null && users.contains(x.userid))) .tolist(); error:
additional information: unable create null constant value of type 'system.string[]'. entity types, enumeration types or primitive types supported in context.
i going assume entity framework based on error message. reason why query throws error message (you didn't post full error & stack trace, it's notsupportedexception) twofold
usersnot entity within contextdb(database mapping) , checking if null cannot translated sql statement.users.contains(x.userid)cannot translated sql statement because users not part of database.
you'd need reorder way written:
var users = request.form.getvalues("users[]") == null ? null : request.form.getvalues("users[]").toarray(); if(users != null) { list<quicksearchview> qsvs = db.quickseachviews.tolist(); var submississions = qsvs.where(x => users.any(x.userid)); } else { //something when users null } potentially, might work well, haven't tested , don't remember since haven't tried recently:
var submissions = db.quicksearchviews.where(x => users.any(x.userid)); you might need call db.quicksearchviews.load(); first though, you'll need test it.
pro tip:
if you're concerned users being null can use null coalescing operator ??. since mentioned users null when empty can this:
var users = (request.form.getvalues("users[]") ?? new string[0]).tolist(); this make sure users never null, , therefore don't need check it. however, don't need call tolist() on or in original post since request.form.getvalues() returns array (string[]), implements ienumerable<t> access linq extension methods.
Comments
Post a Comment