结合两个阵列&投影

时间:2011-08-28 15:08:32

标签: .net linq

假设我有构造函数

public SomeObject(string first, string second);

和两个string[]数组

string[] arrayOne = new[] { firstOne, firstTwo };
string[] arrayTwo = new[] { secondOne, secondTwo, secondThree};

如何返回IEnumerableIList每个元素都是由两个数组元素组合而成的新SomeObject?目前,我正在使用

IEnumerable<SomeObject> newEnumerable = from stringOne in arrayOne from stringTwo in arrayTwo select new SomeObject(stringOne, stringTwo);

但我更喜欢像

这样的东西
IEnumerable<SomeObject> newEnumerable = arrayOne.Select(stringOne => arrayTwo.Select(stringTwo => new SomeObject(stringOne, stringTwo));

但最后一个返回IEnumerable<IEnumerable<SomeObject>>,当然,这不是我想要的。

2 个答案:

答案 0 :(得分:1)

目前还不清楚你想要什么 - 如果你只是在寻找不使用查询表达式语法的第一个查询的版本,你想要:

var query = arrayOne.SelectMany(x => arrayTwo, (a, b) => new SomeObject(a, b));

这基本上就是你的查询表达式被扩展到了什么。

如果那个不是你想要什么,请让你的问题更清晰。如果你想要一个数组,只需调用ToArray:

var array = arrayOne.SelectMany(x => arrayTwo, (a, b) => new SomeObject(a, b))
                    .ToArray();

答案 1 :(得分:1)

您可以使用SelectMany()

来展平第二个查询的结果
var newEnumerable =
    arrayOne.Select(stringOne => arrayTwo.Select(stringTwo => new SomeObject(stringOne, stringTwo)).SelectMany(x => x);