【问题标题】:Dynamic where clause using Linq to SQL使用 Linq to SQL 的动态 where 子句
【发布时间】:2012-07-27 01:56:08
【问题描述】:

我正在尝试对未选择的元素和不在 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)

我该怎么做?

【问题讨论】:

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


【解决方案1】:

【讨论】:

  • 我没有找到帮助,请帮助
【解决方案2】:
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 还有更多示例

【讨论】:

    猜你喜欢
    • 2016-06-21
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2010-10-16
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多