我有一个字符串数组列表:
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/