投影:一次填充2个阵列

时间:2013-07-26 18:40:16

标签: c# linq

我以为我会聪明并且写出类似这样的代码示例。它似乎也是一种干净而有效的方式来填充数组,而无需再次枚举。

int i = 0;
var tickers = new List<string>();
var resultTable = results.Select(result => new Company
{
      Ticker = tickers[i++] = result.CompanyTicker,
});

我并不真正关心另一种方法,因为我可以通过for循环轻松实现这一点。我更感兴趣为什么这个代码片段不起作用,即代码运行后tickers.Count = 0,尽管有100多个结果。谁能告诉我为什么我会出现这种意想不到的行为?

3 个答案:

答案 0 :(得分:8)

您需要迭代查询,例如最后使用.ToArray()ToList()。目前您刚刚创建了一个查询,尚未执行

您可能会看到:LINQ and Deferred Execution

另外,我认为您的代码应该为IndexOutOfRange引发异常,因为您的列表没有任何项目。

答案 1 :(得分:2)

这是由于LINQ的延迟执行。当查询执行时(即当你迭代它时),列表应该有你的结果。一种简单的方法是使用ToArrayToList

答案 2 :(得分:1)

我没有看到什么会阻止这个过程分为两步:

var tickers = results.Select(r => r.CompanyTicker).ToList();

var resultTable = tickers.Select(t => new Company { Ticker = t }).ToList();