2012-04-20 25 views
7

Usando Dapper, lo siguiente arroja Incorrect syntax near ','.Dapper and In Condition

const string sql = 
    "select * from ZipToZipDistance z where z.NoRouteFound = 0" + 
    " and z.OriginZip in (@zips) or z.DestZip in (@zips)"; 
var zipStrings = zips.Select(x => x.ToString()).ToArray(); 
var result = connection.Query<ZipToZipDistance>(sql, 
    new { zips = zipStrings }); 

Hmm, el SQL no tiene comas. Debe tener algo que ver con el parámetro. OriginZip y DestZip son varchar(10). zips es IEnumerable<int>. Intenté usar zips como parámetro sin la conversión a cadenas. Mismo error.

Parece muy sencillo. ¿Qué estoy haciendo mal?

+1

quitar los soportes de @zips – jaxxbo

+0

Had mismo problema en este momento y me acaba de quitar las abrazaderas/paréntesis alrededor @zips. Solo como dice jaxxbo. –

Respuesta

7

intento:

const string sql = 
const string sql = 
    "select * from ZipToZipDistance z where z.NoRouteFound = 0" + 
    " and z.OriginZip in @zips or z.DestZip in @zips"; 
var zipStrings = zips.Select(x => x.ToString()); 
var result = connection.Query<ZipToZipDistance>(sql, 
    new { zips = zipStrings }); 
+0

Sam el problema que me encuentro es que solo puedo pasar 2100 elementos en la cláusula IN que parece ser una limitación inteligente porque cuando construyo la consulta utilizando la concatenación de cadenas funciona bien. Esto es lo que quiero decir: Código de trabajo: var query = @ "SELECT * FROM QuestionTags WHERE QuestionID IN (" + idsCsvString + ")"; var results = conn.Query (query) .ToList(); – Marko

+0

Cuando lo hago de la forma en que sugiere que recibo el siguiente error: La secuencia de protocolo de llamada a procedimiento remoto (RDS) de flujo de datos (TPC) entrante es incorrecta. Se proporcionaron demasiados parámetros en esta solicitud de RPC. El máximo es 2100 – Marko