合并两个不同的列表然后按c#上的公共属性排序?

时间:2015-07-17 18:03:47

标签: c# linq

我有三个这样的对象:

public class MontoAPagar {
    public int IdComprobante {
        get;
        set;
    }
    public int IdMovimiento {
        get;
        set;
    }
    public decimal Monto {
        get;
        set;
    }
    protected MontoAPagar(int idComprobante, int idMovimiento, decimal monto) {
        IdComprobante = idComprobante;
        IdMovimiento = idMovimiento;
        Monto = monto;
    }
    protected MontoAPagar() {}
}
public class PagoInfoDBO: MontoAPagar {
    public int IdPago {
        get;
        set;
    }
    public PagoInfoDBO(): base() {}
    public PagoInfoDBO(int idPago, int idComprobante, int idMovimiento, decimal monto): base(idComprobante, idMovimiento, monto) {
        IdPago = idPago;
    }
}
public class ComprobanteMontoDBO: MontoAPagar {
    public TipoComprobante TipoDeComprobante {
        get;
        set;
    }
    public ComprobanteMontoDBO(TipoComprobante tipoDeComprobante, int idComprobante, int idMovimiento, decimal monto): base(idComprobante, idMovimiento, monto) {
        TipoDeComprobante = tipoDeComprobante;
    }
    public ComprobanteMontoDBO() {}
}

然后我有一个方法需要两个列表List<PagoInfoDBO> pagosList<ComprobanteMontoDBO> montosDebitoCredito,它们对另一个对这个问题无关紧要的对象执行一些计算。

我需要做的是通过属性pagos然后排序<montosDebitoCreditoIdComprobante以及首先... 它们/ strong>按IdMovimiento属性分组列表。

我怎样才能实现这个目标?

3 个答案:

答案 0 :(得分:0)

试一试,看看它是如何运作的:

        List<B> listB;
        List<C> listC;
        List<A> concatList = new List<A>();
        concatList.AddRange(listB);
        concatList.AddRange(listC);
        List<A> orderedList = concatList.OrderBy(prop => prop.ID).ThenBy(prop => prop.AnotherID).ToList();

取决于你的意思完全取决于我猜...

答案 1 :(得分:0)

var result = (from b in listB 
join c listC on b.id equals c.id into group
from g in group.DefaultIdEmpty()
select 
    g.AnotherId, 
    b.somefield, 
    c.anotherfield
).OrderBy(x = > x.AnotherId)

修改

var result = (from p in pagos
join m montosDebitoCredito on p.IdComprobante equals m.IdComprobante into group
from g in group.DefaultIdEmpty()
select g
).OrderBy(x = > x.IdMovimiento)

答案 2 :(得分:0)

你的意思是这样的吗?

false