如何在AddRange之后对列表进行排序?

时间:2016-04-06 23:11:05

标签: c# sql linq

C#,SQL和Linq的新手。我有两个列表,一个" dataTransactions" (来自加油站的燃料)和类似的一个" dataTransfers" (来自滑动罐的燃料)。

他们每个人都从SQL访问不同的表,并在以后合并。

        List<FuelLightTruckDataSource> data = new List<FuelLightTruckDataSource>();

        using (SystemContext ctx = new SystemContext())
        {

            List<FuelLightTruckDataSource> dataTransactions
                = ctx.FuelTransaction
                    .Where(tx => DbFunctions.TruncateTime(tx.DateTime) >= from.Date && DbFunctions.TruncateTime(tx.DateTime) <= to.Date
                        //&& tx.AssetFilled.AssignedToEmployee.Manager
                        && tx.AssetFilled.AssignedToEmployee != null
                        //&
                        && tx.AssetFilled.AssetType.Code == "L"
                        && (tx.FuelProductType.FuelProductClass.Code == "GAS" || tx.FuelProductType.FuelProductClass.Code == "DSL"))
                    .GroupBy(tx => new { tx.AssetFilled, tx.DateTime, tx.FuelProductType.FuelProductClass, tx.FuelCard.FuelVendor, tx.City, tx.Volume, tx.Odometer}) //Added tx.volume to have individual transactions
                    .Select(g => new FuelLightTruckDataSource()
                    {
                        Asset = g.FirstOrDefault().AssetFilled,
                        Employee = g.FirstOrDefault().AssetFilled.AssignedToEmployee,
                        ProductClass = g.FirstOrDefault().FuelProductType.FuelProductClass,
                        Vendor = g.FirstOrDefault().FuelCard.FuelVendor,
                        FillSource = FuelFillSource.Transaction,
                        Source = "Fuel Station",
                        City = g.FirstOrDefault().City.ToUpper(),
                        Volume = g.FirstOrDefault().Volume,
                        Distance = g.FirstOrDefault().Odometer,
                        Date = g.FirstOrDefault().DateTime

                    })
                    .ToList();

最后,我使用

            data.AddRange(dataTransactions);
            data.AddRange(dataTransfers);

将两个列表放在一起并生成燃料消耗报告。 两个列表都按日期单独排序,但在&#34; AddRange&#34;之后。 &#34; dataTransfers&#34;只是被添加到最后,按日期丢失我的排序。在使用&#34; AddRange&#34;之后,如何按日期再次对组合结果进行排序?命令?

2 个答案:

答案 0 :(得分:5)

试试这个:

>= 0

或者如果您想订购降序:

data = data.OrderBy(d => d.Date).ToList();

答案 1 :(得分:1)

您可以致电List<T>.Sort(delegate)

https://msdn.microsoft.com/en-us/library/w56d4y5z(v=vs.110).aspx

示例:

data.Sort(delegate(FuelLightTruckDataSource x, FuelLightTruckDataSource y)
{
    // your sort logic here.
});

优势:此类并不像IList<T>中那样创建新的OrderBy实例。它是一件小事,但对某些人来说这很重要,特别是对于性能和内存敏感的情况。