2010-03-05 25 views
5

Estamos construyendo dinámicamente algunas sentencias SQL y estamos utilizando el operador IN. Si nuestro valor es un conjunto de valores tales que:Compruebe si un objeto es una colección genérica

List<Guid> guids = new List<Guid>() 

quiero ser capaz de proveedor 'GUID' a mi constructor cláusula, tienen que verificar el tipo y si es enumerable crear una cláusula como:

IN ({Guid1}, {Guid2}, {Guid3}) 

comprobar que el valor es IEnumerable como esto:

if (value is IEnumerable) 

cae hacia abajo cuando se pasa una cadena en (lo que ocurre con bastante regularidad :)). ¿Cuál es la mejor manera de validar este tipo de condición?

+1

No construya su propio sql. O vaya a LINQ (de lo que NO soy fanático) o use otro mecanismo. No solo es difícil de depurar, es difícil de mantener sin volver a implementar la aplicación para cambios de consulta menores, sino que invariablemente hay problemas de inyección de SQL que deben tratarse. – NotMe

+0

No es una opción. : | Créanme que estaría usando Linq en un latido del corazón. –

Respuesta

7

¿Qué tal:

if(value .GetType().IsGenericType && value is IEnumerable) 
5

Usted podría intentar value.GetType().IsGenericType en combinación con su cheque de IEnumerable.

+0

Él te ganó por un minuto :) –

2

¿Qué hay de:

value is IEnumerable<Guid> 

Es mejor si esperas casos Guid, ¿verdad?

Cuestiones relacionadas