让我们说我们有一个简单的业务对象:
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}
}
现在,在我的程序的某些部分,我想获得在某个聚合门内遇到的all distinct
个简单对象的列表。我们正在大量使用自动播放器,但到目前为止我还没有设法映射它。可能是LINQ查询是更好的选择吗?你会如何解决这个问题?
答案 0 :(得分:1)
假设你拥有的是:
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();