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

Popular posts from this blog

c# - How to get the current UAC mode -

postgresql - Lazarus + Postgres: incomplete startup packet -

angularjs - ng-repeat duplicating items after page reload -