Usinq Linq选择半逗号分隔字符串中的项目?

我有一个半逗号分隔名称的字符串:

string names = "Jane;Harry"; 

我还有一个客户对象列表:

 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; 

如何创建仅返回名称位于半逗号分隔列表中的客户的查询?

类似于T-SQL SELECT FistName FROM customer WHERE FirstName IN (list) (排序)

好吧,你应该把字符串分开来开始 – 否则即使列表是“珍妮特;哈利”,你也会获得“简”的匹配。

你可以这样做:

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

另一种选择是使用HashSet ,当列表非常大时,它会表现得更好:

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

我在这里使用了点符号而不是查询表达式,因为当你只应用一个或两个子句时它更简单。 作为查询表达式,它将是:

 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 ;