2012-07-27 56 views
1

我试图做一个过滤器“其中”对未选择元素,并在视图模型动态地方使用LINQ to SQL

这不是条款是,我有:

var UserQuery = (from u in db.USER 
       join c in db.CONSULT on u.IdUser equals c.IdUser 
       select new UserSexViewModel { IdUser= c.IdUser, UserSex=u.Sex}).Distinct(); 

欲由属于对象咨询或

例如,过滤器后面的对象用户通过任何属性后过滤可变UserQuery

CONSULT.TypeConsul, 
CONSULT.DateCreation, 
USER.Name, 
USER.Age, and many more... 

像这样:

UserQuery.Where(q=>q.CONSULT.TypeConsul==2) or UserQuery.Where(q=>q.USER.Age>16) 

我怎么能这样做呢?

+0

基本上你正在试图做的是建立标准是什么,不需要Linq动态查询库,您只需构建表达式限定符 - > http://stackoverflow.com/questions/10497801/can-i-generate-a-linq-expression-dy namically-in-c/10498056#10498056 – kalki 2012-07-27 06:43:19

回答

0
var UserQuery = (from u in db.USER 
       join c in db.CONSULT on u.IdUser equals c.IdUser 
       select new UserSexViewModel { IdUser= c.IdUser, UserSex=u.Sex}).Distinct(); 

//伪代码

var specification = PredicateBuilder.True<Consult>();//default: build from this 
specification = PredicateBuilder.And(specification, x => x.TypeConsult == 2); 
var additionalCriterias = ...; 
specification = additionalCriterias == null || additionalCriterias.Length == 0 
        ? specification 
        : GetComposedSpecification(additionalCriterias); 

var users = UserQuery.Where(specification).ToList() 

predicateBuilder @http://www.albahari.com/nutshell/predicatebuilder.aspx有更多的例子