2011-01-04 13 views
6

Ho bisogno di farlo usando la sintassi concatenata di linq. Ho:Come faccio a sintonizzarsi 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) 

risposta

7

è possibile utilizzare un semplice Contains.

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

Se dovessi usare la sintassi JOIN o la sintassi IN, come dovrei farlo (sebbene la risposta funzioni come un incantesimo) – DotnetDude

+0

@Dotnet, cosa intendi? "JOIN o IN" - Sono cose molto diverse. – jjnguy

+0

Intendi "IN" come criterio "JOIN"? – n8wrl

0

estensioni statiche funzionano bene con il tuo LINQ esigenze:

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

e ora il tuo codice originale può essere modificato in questo modo:

// 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

So che questo è vecchio, ma ho pensato questo aiuterebbe i nuovi lettori di questo post.

Simile a code4life, utilizzo un metodo di estensione. La differenza, però, è che io uso i generici, quindi questo funzionerà con più tipi.

Potete leggere la mia blog post per visualizzare ulteriori informazioni su come fare questo, ma l'idea principale è questo:

Con l'aggiunta di questo metodo di estensione per il tuo codice:

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

è possibile eseguire la vostra ricerca come questa:

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

funziona su qualsiasi tipo (fino a quando si crea un buon metodo di uguale). Qualsiasi tipo di valore di sicuro.

Problemi correlati