将for循环Linq查询重构为单个查询

时间:2012-04-13 09:50:31

标签: linq for-loop refactoring

我有一组数据需要一些处理,但我想拆分工作可用线程。如何将其更改为单个指令,最好是删除for循环?

string[] keysForThread;
IEnumerable<string> allData;
List<string> dataForSingleThreadToProcess;

for (int i = 0; i < keys.length; i++)
    dataForSingleThreadToProcess.AddRange(allData.Where(x => x.StartsWith(keys[i])));

我不介意将string [] keysForThread更改为List和/或List dataForSingleThreadToProcessin到IEnumerable。

3 个答案:

答案 0 :(得分:1)

这听起来像你想要的:

var data = allData.Where(datum => keys.Any(key => datum.StartsWith(key))
                  .ToList();

答案 1 :(得分:0)

这是在没有for循环的情况下执行代码的直接方式。

var data = keys.SelectMany(k => allData.Where(d => d.StartsWith(k)).ToList();

然而,Jon双向飞碟的答案可能会更有效率。

答案 2 :(得分:0)

这应该做的工作:

dataForSingleThreadToProcess = allData.Where(x => keys.Any(x.StartsWith)).ToList();