使用Linq to SQL的动态where子句

时间:2012-07-27 01:56:09

标签: linq linq-to-sql linq-to-entities

我正在尝试对未选中的元素进行“where”过滤,而不是在ViewModel中

这就是我有:

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();

我想稍后使用属于对象CONSULT或对象USER

的任何属性过滤变量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)

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分: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还有更多示例