Как использовать ObjectQuery с фильтром Where, разделенным предложением OR - PullRequest
5 голосов
/ 25 сентября 2010

Может ли кто-нибудь помочь мне ответить, как переписать необработанный SQL-фильтр ГДЕ (...) ИЛИ (...) с помощью ObjectQuery, пожалуйста?

String queryRaw = "SELECT ls.LocaleName, ls.IsActive, ls.LocaleDescription " +
                  "FROM RoutesEntities.Locales AS ls ";

                  //" WHERE ls.LocaleName = 'en' OR ls.LocaleName = 'de' "

this._queryData = new ObjectQuery<DbDataRecord>(queryRaw, routesModel);

Я бы использовал метод Where (),но он генерирует, где предложения разделены AND, хотя я хочу использовать вместо этого.Это возможно с QueryBilder?Я имею в виду, как использовать это для создания фильтра «ИЛИ отделить»:

Where("it.LocaleName IN (@localeName)", new ObjectParameter("localeName", String.Join(",", localeName)))

Спасибо, Артем

Ответы [ 4 ]

8 голосов
/ 27 сентября 2010

Это происходит снова, я сам отвечаю на свой вопрос.Спасибо за это.

Вот ответ:

ObjectQuery as EntityCommand НЕ ПОДДЕРЖИВАЕТ «В» КЛАВИШУ YET ... это означает, что нет возможности использовать фильтр WHERE IN для отправки запросав БД, пока вы не используете уже выбранный DataSet из БД.Таким образом, только методы LINQ могут сделать это, и только с выбранным List <>

Хотя есть альтернативное, не очень ясное, но эффективное решение - вы можете использовать несколько условий OR в вашем запросе, и они отлично работают для меня:

ObjectQuery<DbDataRecord> query = query.Where("it.RouteID=1 OR it.RouteID=2");

Надеюсь, это кому-нибудь поможет ... наслаждайтесь:)

5 голосов
/ 02 сентября 2011

Вы можете использовать предложение IN в ObjectQuery.Вам просто нужно использовать {вместо (.

Например, «it.ID IN {4,5,6}» вместо «it.ID IN (4,5,6)»

Вся заслуга в этом ответе исходит от обходного пути 'Contains ()' с использованием Linq to Entities?

2 голосов
/ 29 марта 2012

ObjectQuery как EntityCommand ПОДДЕРЖИВАЕТ КЛАВИШУ «IN». Синтаксис

ObjectQuery<SampleProduct> s = db.SampleProducts;
s.Name = "SampleProductName";
string strIDList = "10,20,30";
s= s.Where("SampleProductName.ID IN {" + strIDList + "}");
0 голосов
/ 04 мая 2016

ObjectQuery как EntityCommand ПОДДЕРЖИВАЕТ "КЛАВИШУ" IN ".

Логические операторы ObjectQuery:

ObjectQuery позволяет объединять несколько условий.условия объединяются с использованием параметра AND.Чтобы поместить оператор OR между условиями, вызовите метод Or () между указанными методами Where.Вы также можете явно вызвать метод And (), если хотите сделать код ваших условий более понятным и легким для чтения.

Пример: // Извлекает пользователей с именем "Joe" или последнимимя "Смит".

var whereQuery = UserInfoProvider.GetUsers ()

.Where("FirstName", QueryOperator.Equals, "Joe")
.Or()
.Where("LastName", QueryOperator.Equals, "Smith");

См. подробнее: https://docs.kentico.com/display/K82/Retrieving+database+data+using+ObjectQuery+API

...