2011-10-13 29 views
3

讓我們說我們有一個簡單的業務對象:地圖部件列表<T>

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} 
} 

現在在我的程序的某些部分,我想獲得一個的列表簡單的物體在某個集合體內遇到。我們正在大量使用automapper,但迄今爲止我還沒有設法映射它。可能是一個LINQ查詢是一個更好的選擇?你會如何解決這個問題?

+1

作爲定義的每個'SimpleBO'是不同:除非覆蓋平等操作(和'GetHash')然後引用對象具有「參考身份「。 – Richard

回答

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(); 
+0

這似乎很好,你認爲我應該使用這種方法,而不是automapper,爲什麼? –

+0

@Hohhi調整補償。我不相信Automapper是專門用來做你想做的事情的。 –

+0

你認爲這個邏輯是複雜的稱爲映射嗎? –

相關問題