Usinq Linq per selezionare elementi che si trovano in una stringa separata da una virgola?

Ho una stringa con nomi separati da semi-virgola:

string names = "Jane;Harry"; 

Ho anche un elenco di oggetti del cliente:

 public class Customer { public string FirstName { get; set; } public string LastName { get; set; } } List customers = new List(); customers.Add(new Customer(){FirstName="John", LastName="Doe"}); customers.Add(new Customer(){FirstName="Jane", LastName="Doe"}); customers.Add(new Customer(){FirstName="Harry", LastName="Potter"}); var query = from c in customers select c; 

Come faccio a creare una query che restituisce solo quei clienti che hanno un nome che è nella lista separata da semi-virgola?

Qualcosa come T-SQL SELECT FistName FROM customer WHERE FirstName IN (list) (sorta di)

Bene, dovresti dividere la corda per iniziare – altrimenti otterrai una corrispondenza per “Jane” anche se la lista è “Janet; Harry”.

Potresti fare:

 string[] validNames = names.Split(';'); var query = customers.Where(c => validNames.Contains(c.FirstName)); 

Un’altra opzione è usare un HashSet , che funzionerà molto meglio quando la lista è molto grande:

 HashSet validNames = new HashSet(names.Split(';')); var query = customers.Where(c => validNames.Contains(c.FirstName)); 

Ho usato notazione punto qui invece di un’espressione di query perché è più semplice quando si applica solo una clausola o due. Tuttavia, come espressione di query, sarebbe:

 var query = from c in customers where validNames.Contains(c.FirstName) select c; 
 List firstnames = names.Split(';').ToList(); var query = from c in customers where firstnames.Contains(c.FirstName) select c ;