2010-03-05 9 views
5

Stiamo costruendo dinamicamente alcune istruzioni SQL e stiamo utilizzando l'operatore IN. Se il nostro valore è un insieme di valori tali che:Controlla se un oggetto è una collezione generica

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

voglio essere in grado di provider 'GUID' a mio costruttore clausola, farlo verificare il tipo e se è enumerabile creare una clausola LIKE:

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

controllando che il valore è IEnumerable simili:

if (value is IEnumerable) 

cade quando una stringa viene passato (il che accade abbastanza regolarmente :)). Qual è il modo migliore per convalidare questo tipo di condizione?

+1

Si prega di non costruire il proprio sql. O vai LINQ (di cui NON sono un fan) o usa un altro meccanismo. Non solo è difficile eseguire il debug, è difficile mantenerlo senza ridistribuire l'app per modifiche minori alle query, ma invariabilmente esistono problemi di injection SQL che devono essere affrontati. – NotMe

+0

Non un'opzione. : | Credimi, userei Linq in un batter d'occhio. –

risposta

7

ne dite:

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

Si potrebbe provare value.GetType().IsGenericType in combinazione con il vostro assegno di IEnumerable.

+0

Ti ha battuto di un minuto :) –

2

Che dire:

value is IEnumerable<Guid> 

E 'meglio se vi aspettate casi Guid, non è vero?

Problemi correlati