2016-04-06 3 views
0

новый для C#, SQL и Linq. У меня есть два списка, один «dataTransactions» (топливо с автозаправочных станций) и аналогичный «dataTransfers» (топливо из сливных баков).Как отсортировать список после AddRange?

Каждый из них получает доступ к другой таблице из 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); 

поставить два списка вместе и создать отчет о расходе топлива. Оба списка индивидуально сортируются по дате, но после «AddRange» «dataTransfers» просто добавляется в конец, теряя сортировку по дате. Как отсортировать результат по дате после использования команды «AddRange»?

ответ

5

Попробуйте это:

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

Или, если вы хотите сделать заказ по убыванию:

data = data.OrderByDescending(d => d.Date).ToList(); 
+0

Отлично. Он работал хорошо. Еще одна проблема, мне нужно рассчитать пройденное расстояние по показаниям одометра. Как получить доступ к текущим и предыдущим значениям этого списка данных для расчета этого расстояния? – RFS

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. это небольшая вещь, но для некоторых людей это имеет значение, особенно для производительности и памяти.

Смежные вопросы