Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Динамическое предложение where с использованием Linq to SQL

Автор вопроса: kaluОтветов: 2

Я пытаюсь сделать фильтр "где" на не выбранных элементах и ​​не во 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();

Я хочу позже отфильтровать переменную UserQuery по любому свойству, принадлежащему объекту CONSULT или объекту USER

например, отфильтровать позже по:

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, все, что вам нужно сделать, это создать квалификатор выражения --> stackoverflow.com/questions/10497801/ kalki 27.07.2012

linqlinq-to-entitieslinq-to-sql

Ответы

Ответ 1 · Community

Вам поможет библиотека динамических запросов LINQ.

обратитесь к http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

Ответ 2 · kalki

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 со многими больше примеров

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы