我有两个类定义如下:
class Foo
{
public string name {get; set;}
public long number {get; set;}
}
class Bar
{
//some properties
public string otherName {get; set;}
public long otherNumber {get; set;}
}
如何将这两种类型的两个IEnumerable
序列组合成一个新的匿名类型,该类型包含两个类的属性组合。
示例:
Foo:
name1 - number1
name2 - number2
name3 - number3
Bar:
otherName1 - otherNumber1
OtherName2 - otherNumber2
Desired Result:
name1 - number1
name2 - number2
name3 - number3
otherName1 - otherNumber1
OtherName2 - otherNumber2
我在linq中尝试了Zip
功能而没有运气。
答案 0 :(得分:6)
使用此:
var result = efoo.Select(x => new { x = x.name, y = x.number })
.Concat(ebar.Select(x => new { x = x.otherName, y = x.otherNumber }));
result
是一个匿名类型的枚举,其中x
,y
为属性。您可以使用正常的foreach
循环遍历此序列:
foreach (var i in result)
{
string name = i.x;
long number = i.y;
}
答案 1 :(得分:2)
我不知道连接的重点是什么,以及后来的用途是什么。您可以将其投射到IEnumerable<object>
,然后执行Concat
,例如:
var result = foos.Cast<object>().Concat(bars.Cast<object>());
理想的方法是使用公共基类或接口,并使用它代替object
。
答案 2 :(得分:0)
var result = FooList.Select(t=> new { a = t.name, b = t.number})
.Concat(
BarList.Select(t => new { a = t.othername, b = t.othernumber}));
如果你想“合并”结果,那么使用Union而不是Concat - 但在这种情况下你需要一个比较函数用于元素类型。