2012-07-27 53 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有更多的例子