将聚合的部分映射到List <t> </t>

时间:2011-10-13 07:12:42

标签: c# linq automapper

让我们说我们有一个简单的业务对象:

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查询是更好的选择吗?你会如何解决这个问题?

1 个答案:

答案 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();