2010-09-24 17 views
5

¿Podría alguien ayudarme a responder cómo reescribir el filtro SQL sin formato WHERE (...) O (...) con ObjectQuery bilder, por favor?Cómo usar ObjectQuery con Donde filtro separado por O cláusula

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); 

Usaría el método Where(), pero genera cláusulas where separadas por AND, aunque quiero usar O en su lugar. ¿Es posible con QueryBilder? me refiero a cómo utilizar este para generar "o separados" filtro:

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

Gracias, Artem

Respuesta

7

Está sucediendo de nuevo, contesto a mi pregunta a mí mismo. Gracias por esto.

Aquí está la respuesta:

ObjectQuery como EntityCommand no son compatibles con cláusula de "IN" sin embargo ... que significa que no hay oportunidad de utilizar DONDE EN filtro para enviar a DB consulta hasta que ya seleccionados del uso conjunto de datos de DB. Así que sólo los métodos de LINQ pueden hacer esto y sólo con seleccionado Lista <>

sin embargo, hay una alternativa tan clara pero eficaz decisión de no - se puede utilizar múltiples o condiciones de la consulta y trabajan bien para mí:

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

Esperamos que esto ayude a alguien ... disfrutar :)

5

puede utilizar la cláusula IN en un ObjectQuery. Sólo tiene que utilizar en lugar de {(.

Por ejemplo, "it.ID EN {4,5,6}" en lugar de "it.ID EN (4,5,6)"

Todo el crédito para esta respuesta proviene de 'Contains()' workaround using Linq to Entities?

2

ObjectQuery como EntityCommand SUPPORT "IN" CLAUSE.The Syntex es

ObjectQuery<SampleProduct> s = db.SampleProducts; 
s.Name = "SampleProductName"; 
string strIDList = "10,20,30"; 
s= s.Where("SampleProductName.ID IN {" + strIDList + "}"); 
0

ObjectQuery como EntityCommand SUPPORT "IN" cláusula.

lógico operadores de ObjectQuery:

ObjectQuery le permite unir múltiples condiciones donde.

  • Por defecto, las condiciones se combinan utilizando un parámetro AND. Para colocar un operador OR entre condiciones, llame al método O() entre los métodos Where determinados. También puede llamar explícitamente al método And() si desea que el código de sus condiciones sea más claro y fácil de leer.

Ex: // Recupera usuarios cuyo nombre es "Joe" o su apellido es "Smith".

var whereQuery = UserInfoProvider.GetUsers()

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

referirse más: https://docs.kentico.com/display/K82/Retrieving+database+data+using+ObjectQuery+API

Cuestiones relacionadas