Динамический SQL Query Entity Framework - PullRequest
5 голосов
/ 16 октября 2011

Я искал много сообщений в переполнении стека, чтобы получить ответ, но пока не ясно.Я просто ищу простой способ построения динамических запросов.Мне удалось выполнить простые запросы, включающие одно выражение в предложении where, но я не смог найти простой способ обработки нескольких выражений.У меня есть опыт работы с API критериев NHibernate, который очень удобен для быстрой и безопасной компиляции запросов.Мне хоть что-то подобное будет доступно на EntityFramework, но пока не повезло.Есть ли простой способ, кроме ручного построения строковых запросов?Посмотрите на следующий код, я думал, что он должен работать, но это не так.На самом деле он не строит запрос на несколько лямбда-выражений.Я ожидал, что каждый вызов where будет добавлять одно выражение AND к предложению where.Я что-то упустил?

var query = Entities.Current.Jobs.AsQueryable<Job>();

            if (!string.IsNullOrEmpty(keywords))
            {
                query.Where(j => j.Title.Contains(keywords) || j.Description.Contains(keywords));
            }

            if (industryId > 0)
            {
                query.Where(j => j.IndustryId == industryId);
            }

            if (countyId > 0)
            {
                query.Where(j => j.CountyId == countyId);
            }

            return query.ToList<Job>();

1 Ответ

6 голосов
/ 16 октября 2011

IQueryable является неизменным;Вы не можете (напрямую) изменить запрос существующего IQueryable.query.Where возвращает новый IQueryable с дополнительным предложением where.

Вы ничего не делаете с этими новыми IQueryable s.

Вам нужно написать

query = query.Where(...)
...