2016-04-08 17 views
1

私はトラックの燃料を追跡しています。計算されたフィールドをSQLリストに追加する方法

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

     using (SystemContext ctx = new SystemContext()) 
     { 

      List<FuelLightTruckDataSource> dataTransfers 
       = ctx.FuelTransfer 
        .Where(tr => DbFunctions.TruncateTime(tr.Date) >= from.Date && DbFunctions.TruncateTime(tr.Date) <= to.Date 
         //&& tr.ToAsset.AssignedToEmployee.Manager 
         && tr.ToAsset.AssignedToEmployee != null 
         && tr.ToAsset.AssetType.Code == "L" 
         && tr.Volume != null) 
         //&& (tr.FuelProductType.FuelProductClass.Code == "GAS" || tr.FuelProductType.FuelProductClass.Code == "DSL")) 
        .GroupBy(tr => new { tr.ToAsset, tr.Date, tr.FuelTankLog.FuelProductType.FuelProductClass, tr.FuelTankLog.FuelCard.FuelVendor,tr.Volume, tr.ToAssetOdometer }) 
        .Select(g => new FuelLightTruckDataSource() 
        { 
         Asset = g.FirstOrDefault().ToAsset, 
         Employee = g.FirstOrDefault().ToAsset.AssignedToEmployee, 
         ProductClass = g.FirstOrDefault().FuelTankLog.FuelProductType.FuelProductClass, 
         Vendor = g.FirstOrDefault().FuelTankLog.FuelCard.FuelVendor, 
         FillSource = FuelFillSource.Transfer, 
         Source = "Slip Tank", 
         City = "", 
         Volume = g.FirstOrDefault().Volume.Value, 
         Distance = g.FirstOrDefault().ToAssetOdometer, 
         Date = g.FirstOrDefault().Date, 
        }) 
        .ToList(); 

私の質問の後、私は消費速度と移動距離を計算する必要があります。 "Result"は "consumptionRate"と "Distance"を含むエントリの集まりであり、上記クエリと一致します。

  // Get consumption rate data for each asset 
      foreach (int assetId in assetIds) 
      { 
       FuelConsumptionRateQueryResult result = FuelConsumptionRateQueryService.Get(assetId, from, to, AssetCounterType.Odometer); 
       result.Entries.ToList(); 
      } 

私の質問はどのように私は私のforeachループの結果を取得し、私の以前のクエリ/リストに追加ので、彼らは、レポートに表示することができますか?

答えて

0

resultが新しい変数としてforeachループの各繰り返しで宣言されているため、resultが上書きされている可能性があります。さらに、resultは、foreachループを終了すると、有効範囲内にありません。

代わりに、あなたはおそらくに近い何かをしたい:基本的に

var allResults = new List<T>; //where T is whatever object type this is (FuelConsumptionRateQueryResult?) 

foreach (int assetId in assetIds) 
{ 
    //this is a new variable at each iteration of the loop 
    FuelConsumptionRateQueryResult result = FuelConsumptionRateQueryService.Get(assetId, from, to, AssetCounterType.Odometer); 
    allResults.Add(result); //add the current result to your list (outside the scope of this loop) 
} 

を、ループの外で、あなたの変数を宣言してAddallResultsリストに個々の結果。

+0

私は正しい順序で私の他のリストのdataTransferにallResultsを追加するにはどうすればよいですか?基本的に、allResultsとdataTransferは同じ数のエントリを持ちますが、異なる方法でグループ化されます。 – RFS

+0

さらに、 従業員を持つに似= .FirstOrDefault()。ToAsset.AssignedToEmployeeは、 は、私はあなたがリストあなたに戻って、それを追加したい場合は – RFS

+0

@RFS ConsumptionRate =「私のallResultsにリンクするいくつかのコードを」持っていると思います'allResults'リストを作成するのではなく、それを使ってください。あなたの現在のコードの問題は、 'FuelConsumptionRateQueryResult result'を何にも割り当てていないようです。 – levelonehuman

0

は、LINQ文で追加データを作成し、両方のリストを連結します。

var results = assetIds.Select(id => FuelConsumptionRateQueryService 
          .Get(id, from, to, AssetCounterType.Odometer); 
dataTransfers = dataTransfers.Concat(results); 
関連する問題