how to pass string variable to linq select new {} section -
ii want make search functionality linq multiple columnnames stored session variable. i'm using 1 method:
public void fillgrid(string commandname,string columnname, string searchtext)
that has 3 string variable stores session value.
now want pass columnname query:
var query1 = (from p in db.posts join c in db.categories on p.category_id equals c.id join u in db.users on p.user_id equals u.id (p.touser_id == user_id || p.touser_id == null) && p.user_id != user_id orderby p.sent_datetime descending select new { id = p.id, title = p.title, publisher = u.first_name + " " + u.last_name, touser = p.touser_id, publishdate = p.sent_datetime, isfile = p.isfileattached, categoryname = c.category_name, status_name = (from s in db.status (s.id == p.status_id) select s.status_name).firstordefault(), group_name = (from g in db.groups (g.id == p.group_id) select g.group_name).firstordefault(), filesize = p.totalfilesize, columnname = sesssion["columnname"].tostring() }).where(q => q.columnname.contains(searchtext));
however, columnname not give text or may not part of query have manually give column name because.
for multiple column have, can not use statement like:
.where(q => q.tile.contains(searchtext));
this query works fine single column. there multiple column have have set q.columnname outer side.
i extension method kind of things, building expression predicate.
public static class helper { public static iqueryable<t> filterforcolumn<t>(this iqueryable<t> queryable, string colname, string searchtext) { if (colname != null && searchtext != null) { var parameter = expression.parameter(typeof(t), "m"); var propertyexpression = expression.property(parameter, colname); var searchexpression = expression.constant(searchtext); var containsmethod = typeof(string).getmethod("contains", new[] { typeof(string) }); var body = expression.call(propertyexpression, containsmethod, searchexpression); var predicate = expression.lambda<func<t, bool>>(body, new[] { parameter }); return queryable.where(predicate); } else { return queryable; } } }
usage in case
var query1 = (from p in db.posts join c in db.categories on p.category_id equals c.id join u in db.users on p.user_id equals u.id (p.touser_id == user_id || p.touser_id == null) && p.user_id != user_id orderby p.sent_datetime descending select new { id = p.id, title = p.title, publisher = u.first_name + " " + u.last_name, touser = p.touser_id, publishdate = p.sent_datetime, isfile = p.isfileattached, categoryname = c.category_name, status_name = (from s in db.status (s.id == p.status_id) select s.status_name).firstordefault(), group_name = (from g in db.groups (g.id == p.group_id) select g.group_name).firstordefault(), filesize = p.totalfilesize, }).filterforcolumn(sesssion["columnname"].tostring(), searchtext);
Comments
Post a Comment