2016-03-04 70 views
0

下面的代碼片段顯示了我正在使用的方法(嘗試)在具有相同VIN時選擇車輛的「最新」驅動程序。這種方法被稱爲AFTER我使用LINQ獲取所有車輛在特定位置的所有交易。在C#/ LINQ:如何在列值不恆定的情況下進行分組

group vehicle by new
部分中, DriverLastName是唯一可以逐行更改的列。 vehiclesGrp的返回類型爲IQueryable的

var vehiclesGrp = from vehicle in inVehicles 
        group vehicle by new 
           { 
            vehicle.CCName, 
            vehicle.DADDivision, 
            vehicle.DADArea, 
            vehicle.DADDistrict, 
            vehicle.DADCity, 
            vehicle.Vin, 
            vehicle.CostCenter, 
            vehicle.GLDivision, 
            vehicle.VehicleMake, 
            vehicle.FuelTankCapacity, 
            vehicle.FuelType, 
            vehicle.EplanNumber, 
            vehicle.LicensePlate, 
            vehicle.DateInService, 
            vehicle.EstimatedMpg,          
            vehicle.VehicleStatus, 
            vehicle.DriverLastName,          
           } 
         into grp 
         select new VehicleDetail 
         { 
         Account = "", 
         ActualMpg = 0, 
         NoteID = 0, 
         NoteCount = 0, 
         CardNum = "", 
         CCName = grp.Key.CCName, 
         CostCenter = grp.Key.CostCenter, 
         DADArea = grp.Key.DADArea, 
         DADCity = grp.Key.DADCity, 
         DADDistrict = grp.Key.DADDistrict, 
         DADDivision = grp.Key.DADDivision, 
         DateInService = grp.Key.DateInService, 
         DriverLastName = grp.Key.DriverLastName,        
         EplanNumber = grp.Key.EplanNumber, 
         EstimatedMpg = grp.Key.EstimatedMpg, 
         Exception = "", 
         Exceptions = grp.Sum(vehicle => vehicle.Exception == null ? 0 : 1), 
         ExpenseType = "", 
         FuelGals = grp.Sum(vehicle => vehicle.FuelGals), 
         FuelPin = "", 
         FuelTankCapacity = grp.Key.FuelTankCapacity, 
         FuelType = grp.Key.FuelType, 
         FuelUnitCost = 0, 
         GLDivision = grp.Key.GLDivision, 
         IntAcctPd = 0, 
         InvoiceLineItem = "", 
         LicensePlate = grp.Key.LicensePlate, 
         MaintenanceKey = "", 
         Odometer = grp.Max(vehicle => vehicle.Odometer), 
         OutOfServiceDate = null, 
         SwdsStoreCc = "", 
         TotalAllCost = grp.Sum(vehicle => vehicle.TotalAmount), 
         TotalAmount = 0, 
         TotalFuelCost = grp.Sum(vehicle => vehicle.ExpenseType == "FUEL" ? vehicle.TotalAmount : 0), 
         TotalMaintCost = grp.Sum(vehicle => vehicle.ExpenseType == "MAINT" ? vehicle.TotalAmount : 0), 
         TotalMiscCost = grp.Sum(vehicle => vehicle.ExpenseType == "MISC" ? vehicle.TotalAmount : 0), 
         TransactionDate = grp.Max(vehicle => vehicle.TransactionDate), 
         TranTime = "", 
         TranDay = "", 
         UnitCost = 0,        
         VehicleMake = grp.Key.VehicleMake, 
         VehicleStatus = grp.Key.VehicleStatus, 
         VendorAddress = "", 
         VendorCity = "", 
         VendorName = "", 
         VendorState = "", 
         VendorZip = "", 
         Vin = grp.Key.Vin 
         }; 
    return vehiclesGrp; 

如果司機「邁克」對每月的31號,和驅動程序交易「約翰」不,那麼麥克應該顯示爲司機。如果他們都出現在31日,我不關心哪個車手,只要VIN不重複。

對此的任何幫助將不勝感激。

此外,如果有任何信息我遺漏了,請告訴我,我會盡我所能。

+4

只是一個建議,儘量減少你的問題,只有基本的,城市,Mpg ...與問題無關。我們喜歡幫忙,但我們的時間有限,所以當我看到這麼久的事情時,我就繼續前進。 [如何創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve) –

+0

不要在'DriverLastName'上進行分組並且執行'DriverLastName = grp.OrderyBy(v => v.DriveDate ).Last()。DriverLastName' – juharr

+0

@JuanCarlosOropeza我會記住這一點以備將來參考,謝謝! –

回答

0

最後我從我最初發佈於

var vehiclesGrp = (from v in inVehicles.AsParallel().AsQueryable() 
        orderby v.TransactionDate descending 
        group v by new 
           { 
           v.CCName, 
           v.SwdsStoreCc, 
           v.DADDivision, 
           v.DADArea, 
           v.DADDistrict, 
           v.DADCity, 
           v.Vin, 
           v.CostCenter,          
           v.GLDivision, 
           v.VehicleMake, 
           v.FuelTankCapacity, 
           v.FuelType, 
           v.EplanNumber, 
           v.LicensePlate, 
           v.DateInService, 
           v.EstimatedMpg,          
           v.VehicleStatus,          
           } 
         into gp 
         let uniqueVinAnyDriver = gp.Max(v => v.DriverLastName) 
         select new VehicleDetail 

其中規定,我需要在返回的車輛只有「最新的」司機而言到底是什麼改變了分組。

相關問題