我正在嘗試根據它們的狀態對串列中的所有專案進行排序。我嘗試使用 Dictionary 以下列方式執行此操作,但它給了我一個錯誤。你能幫我正確地做嗎?
根據其狀態的順序應如下所示:已激活、已暫停、已過期和已耗盡。
var table = _plapsaContext.Coupons;
var query = _plapsaContext.Coupons.AsQueryable();
query.Select(e => new CouponDto{
Id = e.Id,
StartingDate = e.StartingDate,
EndingDate = e.EndingDate,
Amount = e.Amount,
TotalCoupons = e.TotalCoupons,
MinimumAmount = e.MinimumAmount,
RestCoupons = e.RestCoupons,
ContractId = e.ContractId,
Status = (e.EndingDate.Date < DateTime.Now.Date && e.Status != CouponStatus.Paused && e.Status != CouponStatus.Drained) ? CouponStatus.Expired : e.Status,
ContractCode = e.ContractId.HasValue ? e.Contract.Code.ToString() : null,
OwnerAssociationCode = e.OwnerAssociactionCode,
BuildingManagerName = e.ContractId.HasValue ? e.Contract.BuildingManagerName : null,
ExcludeFunctionalUnits = e.ExcludeFunctionalUnits
});
Dictionary<CouponStatus, int> orderCoupons = new Dictionary<CouponStatus, int>
{
{ CouponStatus.Activated, 0 },
{ CouponStatus.Paused, 1 },
{ CouponStatus.Expired, 2 },
{ CouponStatus.Drained, 3 },
};
Array.Sort(query.ToArray(), (p, q) => orderCoupons[p.Status].CompareTo(orderCoupons[q.Status]));
Console.WriteLine(query);
return (IQueryable<CouponDto>)query;
我希望你可以幫助我!非常感謝!
uj5u.com熱心網友回復:
此查詢應按所需方式排序。我認為您不需要在這里對字典進行排序。以下查詢將在服務器端對資料進行排序。
var query = _plapsaContext.Coupons.AsQueryable();
var dtoQuery = query
.Select(e => new CouponDto
{
Id = e.Id,
StartingDate = e.StartingDate,
EndingDate = e.EndingDate,
Amount = e.Amount,
TotalCoupons = e.TotalCoupons,
MinimumAmount = e.MinimumAmount,
RestCoupons = e.RestCoupons,
ContractId = e.ContractId,
Status = (e.EndingDate.Date < DateTime.Now.Date && e.Status != CouponStatus.Paused && e.Status != CouponStatus.Drained) ? CouponStatus.Expired : e.Status,
ContractCode = e.ContractId.HasValue ? e.Contract.Code.ToString() : null,
OwnerAssociationCode = e.OwnerAssociactionCode,
BuildingManagerName = e.ContractId.HasValue ? e.Contract.BuildingManagerName : null,
ExcludeFunctionalUnits = e.ExcludeFunctionalUnits
});
dtoQuery = dtoQuery
.OrderBy(e => e.Status == CouponStatus.Activated ? 0
: e.Status == CouponStatus.Paused ? 1
: e.Status == CouponStatus.Expired ? 2
: e.Status == CouponStatus.Drained : 3
);
return dtoQuery;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/438713.html
上一篇:當我嘗試從編輯頁面的資料中獲取資料時,它向我顯示錯誤
下一篇:如何將資料從API保存到資料庫?
