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 ;