2011-01-04 9 views
6

? Necesito hacer esto usando la sintaxis de encadenamiento de linq. Tengo:¿Cómo hago IN sintaxis con Linq

string[] arr = new string[] {"Chicago", "NewYork"}; 

var a = Members.Where(x => x.City == <here I want to get all members in chicago or newyork) 

Respuesta

7

Puedes usar un simple Contains.

var a = Members.Where(x => arr.Contains(x.City)); 
+0

Si tuviera que usar la sintaxis JOIN o la sintaxis IN, ¿cómo lo haría? (Aunque tu respuesta funciona como un amuleto) – DotnetDude

+0

@Dotnet, ¿qué quieres decir? "UNIRSE O ENTRAR" - Son cosas muy diferentes. – jjnguy

+0

¿Quiere decir 'IN' como el criterio 'JOIN'? – n8wrl

0

extensiones estáticas funcionan bien con su LINQ necesita:

// add this class to your project... 
public static class StringExtensions 
{ 
    public static bool IsIn(this string target, params string[] testValues) 
    { 
     return testValues.Contains(target); 
    } 
} 

Y ahora su código original se puede cambiar así:

// quick and dirty code: 
var a = Members.Where(x => x.City.IsIn("Chicago", "NewYork"); 

// less quick and dirty code: 
string[] arr = new string[] {"Chicago", "NewYork"};  
var a = Members.Where(x => x.City.IsIn(arr); 
3

Sé que esto es viejo, pero me pareció esto ayudaría a los nuevos lectores de esta publicación.

Similar a code4life, utilizo un método de extensión. La diferencia, sin embargo, es que uso genéricos, así que esto funcionará con varios tipos.

Puede leer mi blog post para ver más información acerca de cómo hacer esto, pero la idea principal es la siguiente:

Al añadir este método de extensión de su código:

public static bool IsIn<T>(this T source, params T[] values) 
{ 
    return values.Contains(source); 
} 

que se pueden realizar su buscar de esta manera:

var a = Members.Where(x => x.City.IsIn("Chicago", "NewYork"); 

Funciona en cualquier tipo (siempre que cree un buen método de igualdad). Cualquier tipo de valor para seguro.