c# - 将聚合的部分映射到 List<T>

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

现在,在我的程序的某些部分,我想获得一个列表,其中包含在特定聚合内遇到的所有不同 简单对象。我们正在大量使用自动映射器,但到目前为止我还没有设法映射它。 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/

相关文章:

c# - 在 WebAPI 中绑定(bind)抽象操作参数

c# - 查找 MongoDB 文档并仅匹配带有 C# 驱动程序的数组元素

c# - 如果遇到不止一次,使自动映射器缓存对象

c# - 连接池和 Appdomain

c# - 集合内的 Xml 序列化

c# - LINQ 中的 order by 问题

c# - 如何从列表中删除连续的重复项

c# - 自定义包含TakeWhile(),有没有更好的办法?

c# - 自动映射器投影到更大的对象

c# - 使用 AutoMapper 强制浅拷贝