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

Mag*_*son 5 .net c# linq

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

string names = "Jane;Harry";
Run Code Online (Sandbox Code Playgroud)

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

public class Customer
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

List<Customer> customers = new List<Customer>();
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;
Run Code Online (Sandbox Code Playgroud)

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

类似于T-SQL SELECT FistName FROM customer WHERE FirstName IN (list) (有点像)

Jon*_*eet 13

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

你可以这样做:

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

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

HashSet<string> validNames = new HashSet<string>(names.Split(';'));
var query = customers.Where(c => validNames.Contains(c.FirstName));
Run Code Online (Sandbox Code Playgroud)

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

var query = from c in customers
            where validNames.Contains(c.FirstName)
            select c;
Run Code Online (Sandbox Code Playgroud)