Usinq LINQ到选择的项目是在一个半逗号分隔字符串?是在、逗号、字符串、项目

2023-09-03 06:43:11 作者:╯ε╰~嘟嘟嘴°

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

I have a string with semi-comma separated names:

string names = "Jane;Harry";

我也有客户对象的列表:

I also have a list of customer objects:

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;

我如何创建一个只返回客户,也可以是在半决赛中以逗号分隔列表中的第一个名称的查询?

How do I create a query that returns only those customers that has a first name that is in the semi-comma separated list?

有点像T-SQL SELECT FistName FROM客户WHERE姓IN(名单) (在某种程度上)

Something like the T-SQL SELECT FistName FROM customer WHERE FirstName IN (list) (sort of)

推荐答案

那么,你真的应该分割字符串达创业 - 否则,你会得到一个匹配简,即使名单是珍妮特·哈利

Well, you should really split the string up to start with - otherwise you'll get a match for "Jane" even if the list is "Janet;Harry".

您可以这样做:

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

另一种方法是使用的HashSet ,将执行好了很多,当列表是非常大的:

Another option is to use a HashSet, which will perform a lot better when the list is very large:

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

我用点号在这里,而不是一个查询EX pression,因为它更简单,当你只是申请一个或两个条款。作为一个查询前pression不过,这将是:

I've used dot notation here instead of a query expression because it's simpler when you're just applying a clause or two. As a query expression though, it would be:

var query = from c in customers
            where validNames.Contains(c.FirstName)
            select c;