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

标签 c# .net linq

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

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-SQL SELECT FistName FROM customer WHERE FirstName IN (list) (有点)

最佳答案

好吧,您确实应该首先将字符串拆分 - 否则即使列表是“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;

关于c# - Usinq Linq 选择以半逗号分隔的字符串中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1536925/

相关文章:

C#:HtmlAgilityPack 提取内部文本

.net - 不匹配确切单词的正则表达式

c# - 使用通用 LINQ 表达式调用 Contains 方法的忽略大小写

c# - 使用 Linq To Objects 执行分组/投影的最简单方法

c# - 如何使用 Entity Framework 一次将数据插入两个表

c# - 如果 XValueType ="Time"和系列包含跨越多天的日期时间,则 ASP 图表格式不正确

c# - 产品商标名称求同名类/ namespace

.net - 您可以使用 dotnet core 构建/运行的最简单的应用程序是什么?

.net - 使用反射创建对象 : Activator. CreateInstance 或 Inovking 构造函数 C#

c# - 类设计问题: Union of List<ChildStat> and AllStats