2010-02-04 14 views
6

Retroceder de SQL a LINQ2SQL a veces es bastante simple. La siguiente declaración¿Cómo se genera una cláusula WHERE ... IN utilizando LINQ2SQL?

SELECT user FROM users WHERE lastname='jones' 

traduce con bastante facilidad en

from u in users where u.lastname='jones' select u 

Pero, ¿cómo conseguir genera el siguiente código SQL?

SELECT user FROM users WHERE lastname IN ('jones', 'anderson') 

Respuesta

11

Tuve que hacer un poco de búsqueda para encontrar esto, y pensé que podría ser útil para otros.

List<string> names = new List<string>() { "jones", "anderson" }; 

from u in users where names.Contains(u.lastname) select u 
+0

usted va a ejecutar en un problema con la expresión 'Contains' no ser traducible a SQL, por lo que no funciona si los usuarios es un' System.Data.Linq.Table' en un LinqToSql DataContext. –

+1

@klausbyskov: Esto no es verdad. Entity Framework/LINQ to Entities no puede hacer esto en .NET 3.5, pero LINQ to SQL estará feliz de convertir esto en SQL. El único problema es que la cantidad de elementos en la cláusula IN() (la cantidad de elementos en la lista 'nombre') es limitada, debido a las limitaciones de ADO.NET. – Steven

+0

@klausbyskov: Realmente funciona bien, he ejecutado el código y he mirado el resultado en SQL Profiler. ¿Me diste los votos negativos? – Jedidja

Cuestiones relacionadas