假设我们有一个简单的业务对象:
class SimpleBO
{
public string Field1{get;set;}
public string Field2{get;set;}
}
我们还有一个像这样的复杂聚合:
class ComplexBO
{
public SimpleBO SimpleBOField {get;set}
public List<SomeClass> ObjectList {get;set;}
public SomeClass Object {get;set;}
}
SomeClass 本身有一个 SimpleBO 的引用:
class SomeClass
{
public SimpleBO SimpleBOField {get;set}
}
现在,在我的程序的某些部分,我想获得一个列表,其中包含在特定聚合内遇到的所有不同
简单对象。我们正在大量使用自动映射器,但到目前为止我还没有设法映射它。 LINQ 查询可能是更好的选择?你会如何解决这个问题?
最佳答案
假设你拥有的是:
ComplexBO aggregate = ...
那么你应该只需要:
var objects = aggregate.ObjectList.Select(x => x.SimpleBOField).Concat(
new[] {aggregate.SimpleBOField, aggregate.Object.SimpleBOField }
).Distinct().ToList();
这将为您提供独特的对象引用;如果您需要不同的值对,那么要么覆盖Equals()
/GetHashCode()
,要么作弊:
var objects = aggregate.ObjectList.Select(x => x.SimpleBOField).Concat(
new[] {aggregate.SimpleBOField, aggregate.Object.SimpleBOField }
).Select(
x => new {x.SimpleBOField.Field1, x.SimpleBOField.Field2}
).Distinct().Select(
x => new SimpleBO {Field1 = x.Field1, Field2 = x.Field2}
).ToList();
关于c# - 将聚合的部分映射到 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750612/