c# - LINQ 搜索特定字符串的字符串数组列表

标签 c# arrays linq

我有一个字符串数组列表:

List<String[]> listOfStringArrays = something;

我需要从集合中选择所有对象,这些对象的值等于列表中任何字符串数组的第 0 个索引处的字符串。

例如,如果我只有一个简单的字符串列表,声明为:

List<String> listOfStrings = something;

我会这样做:

var query = someCollection.Where(x => listOfStrings.Contains(x.id_num))

但显然它不是字符串数组列表那么简单。

我知道我可以轻松地遍历字符串数组列表并创建一个具有第 0 个值的简单字符串列表,如下所示:

List<String[]> listOfStringArrays = something;
List<String> listOfValues = new List<String>();

foreach (string[] s in listOfStringArrays)
    listOfValues.Add(s[0]);

var query = someCollection.Where(x => listOfValues.Contains(x => x.id_num);

但我真的很想避免这种情况,并试图将它写成一个单行代码而不引入额外的列表和循环。

最佳答案

您可以将所有内容放入一个查询中:

someCollection.Where(x => listOfValues.Select(y => y[0]).Contains(x => x.id_num);

但它会遍历 listOfValues一遍又一遍。

我宁愿选择 HashSet<string>让它更快:

var set = new HashSet<string>(listOfValues.Select(y => y[0]));
someCollection.Where(x => set.Contains(x));

关于c# - LINQ 搜索特定字符串的字符串数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055423/

相关文章:

javascript - 如何合并不同属性和长度的对象而不重复

c# - 如何获取多维数组的宽和高?

c# - 是否可以重构此 nHibernate Linq 查询?

java - 子类型多态性和数组

c# - 使用空间类型和自动映射器时如何优化 Entity Framework 查询?

.net - System.Xml.Linq.XDocument' 在未引用的程序集中定义

javascript - 当文本更改且文本框不失去焦点时调用方法

c# - 在 C# 控制台应用程序中访问 dbContext

使用 Lazy<T> 的 C# 单例模式

C# 结构体使用技巧?