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

问题描述 投票:5回答:3

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

string names = "Jane;Harry";

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

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;

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

类似于T-SQLSELECT FistName FROM customer WHERE FirstName IN (list)(某种)

c# .net linq
3个回答
13
投票

嗯,您应该真正地将字符串拆分为开头-否则即使列表为“ Janet; Harry”,也将获得与“ Jane”的匹配项。

您可以做:

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

另一种选择是使用HashSet,当列表很大时,它的性能会更好:

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

我在这里使用点表示法而不是查询表达式,因为当您仅应用一两个子句时,它更简单。但是,作为查询表达式,它将是:

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

1
投票
List<string> firstnames = names.Split(';').ToList();

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

0
投票

它将有所帮助

string allid =“ 11,12,13,14,15,16”;

string [] arrid = allid.Split(',');

var data = context.MyModels.Where(x => arrid.Contains(x.ProjectId.ToString()))]

© www.soinside.com 2019 - 2024. All rights reserved.