簡體   English   中英

C#/ LINQ:當列的值不恆定時如何分組

[英]C# / LINQ: How to GroupBy when a column's value is not constant

下面的代碼片段顯示了當他們具有相同的VIN時,我用來(嘗試)選擇“最新”車輛駕駛員的方法。 在我使用LINQ在特定位置獲取所有車輛的所有交易之后,此方法稱為。 在里面

group vehicle by new
部分, DriverLastName是唯一可以在行與行之間更改的列。 VehicleGrp的返回類型是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; 

如果驅動程序“ Mike”在當月31日進行交易,而驅動程序“ John”沒有,那么Mike應該顯示為驅動程序。 如果它們都出現在31號,只要不復制VIN,我不在乎哪個驅動程序。

任何幫助,將不勝感激。

另外,如果有任何我遺漏的信息,請告訴我,我會盡力提供。

我最終將分組從最初發布的分組更改為

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

就只返回“最新”車輛駕駛員而言,這正是我所需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM