Отображение частей агрегата в список <T> - PullRequest
3 голосов
/ 13 октября 2011

Допустим, у нас есть простой бизнес-объект:

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 простых объектов, встречающихся внутри определенного агрегата. Мы активно используем autopper, но мне пока не удалось отобразить его. Может быть, запрос LINQ является лучшим вариантом? Как бы вы решили это?

1 Ответ

1 голос
/ 13 октября 2011

Предполагая, что у вас есть:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...