我有:var list = IEnumerable<MergedData>
其中
public class MergedData
{
public A A;
public B B;
}
public class A
{
public int Id;
public string Value;
}
public class B
{
public int Id;
public string Value;
}
我该怎么做才能最终得到一个合并类型的列表,其中A.Id, A.Value, B.Id, B.Value
没有创建匿名类型?
我希望合并程序独立于特定类型A
和B
。
答案 0 :(得分:1)
即使我更喜欢@Yumei De Armas回答背后的想法。只需创建一个包含所需属性的新类,并创建此类的新实例。类似的东西:
public class MergedData
{
public int AId;
public string AValue;
public int BId;
public string BValue;
}
在您的LINQ中,您只需使用此类而不是匿名对象,例如:
..new MergedData { AId = some_value, AValue = some_value, BId = some_value, BValue = some_value}
但是,您已经在MergedData
课程中拥有这两个课程,所以如果您坚持自己的设计,那么您应该将语法复杂化一点:
..new MergedData { new A { Id = some_value, Value = some value}, new B { Id = some_value, Value = some value}}
答案 1 :(得分:0)
为什么不能使用匿名类型?
var result = list.Select(item => new {
AId = item.A.Id,
AValue = item.A.Value,
BId = item.B.Id,
BValue= item.B.Value});
你到底需要什么?
例如,列表的值为A = {2,“2”},B = {3,“3”},A = {4,“4”},B = {5,“5”},什么是预期的结果?
注意:如果你想让两者都在同一个列表中,你可以做一些我想的事情......(我还没有测试过)
var result = list.Select(item => new {
Id = item.A.Id,
Value = item.A.Value
}).ToList().AddRange(list.Select(item => new {
Id = item.B.Id,
Value = item.B.Value
});
但是,您仍需要在不同的字段中包含Id和Value。您是否还希望将两个字段添加到同一列表中?
答案 2 :(得分:0)
我认为你需要更清楚地提出你的问题 - 特别是关于预期的产出。这是我的解释:
public class MergedData<T,T2>
{
public T A;
public T2 B;
public MergedData(T A, T2 B)
{
this.A = A;
this.B = B;
}
}
public class A
{
public int Id;
public string Value;
}
public class B
{
public int Id;
public string Value;
}
var listOfMerged = new List<MergedData<A,B>>();
for (int i=0; i<listOfA.Count; i++)
listOfMerged.Add(new MergedData<A,B> (listOfA[i],listOfB[i]));
// Example of Use
var merged = listOfMerged[0];
Console.WriteLine(merged.A.Id);
Console.WriteLine(merged.B.Value);
如果这与你想要的一致,我会看一下Tuple类型。