var query = TableNoTracking;
query = query
.Include(r => r.UserRoles).ThenInclude(o => o.Role)
.Include(c => c.Photos.Where(x => x.IsMain))
.Include(w => w.Wallets)。
我的排序部分如下,我想動態地處理排序問題
。 if (!string.IsNullOrWhiteSpace(filterUser.SortBy))
{
switch (filterUser.reverse)
{
//reverse[/span
case true:
switch (filterUser.SortBy)
{
case UserNavigationPropsForSort.InventorySum。
query = query.OrderByDescending(x => x.Wallets.Select(y => y.Inventory).Sum())。
break。
case UserNavigationPropsForSort.InterMoneySum:
query = query.OrderByDescending(x => x.Wallets.Select(y => y.InterMoney).Sum())。
break。
case UserNavigationPropsForSort.ExitMoneySum:
query = query.OrderByDescending(x => x.Wallets.Select(y => y.ExitMoney).Sum())。
break。
case UserNavigationPropsForSort.OnExitMoneySum:
query = query.OrderByDescending(x => x.Wallets.Select(y => y.OnExitMoney).Sum())。
break。
}
break;
case false:
switch (filterUser.SortBy)
{
case UserNavigationPropsForSort.InventorySum:
query = query.OrderBy(x => x.Wallets.Select(y => y.Inventory).Sum())。
break。
case UserNavigationPropsForSort.InterMoneySum:
query = query.OrderBy(x => x.Wallets.Select(y => y.InterMoney).Sum())。
break。
case UserNavigationPropsForSort.ExitMoneySum:
query = query.OrderBy(x => x.Wallets.Select(y => y.ExitMoney).Sum())。
break。
case UserNavigationPropsForSort.OnExitMoneySum:
query = query.OrderBy(x => x.Wallets.Select(y => y.OnExitMoney).Sum())。
break。
}
break;
}
我包含了幾個物體,現在我想根據所包含的屬性動態地排列這個查詢,例如錢包中的庫存。 我試過動態查詢庫,但它對這種情況不起作用;
我怎樣才能做到這一點?
我怎樣才能做到這一點呢?
uj5u.com熱心網友回復:
我不完全確定,如果不在UserNavigationPropsForSort和Wallet屬性之間設定一個映射,就不可能做到完全動態。
- 除非你想進入運算式樹的構建,我懷疑這對你實際想做的事情來說是多余的。如果不是,請參考這里的檔案。https://docs.microsoft.com/en-us/dotnet/csharp/expression-trees-building
我所做的是使你的代碼更加簡潔和可擴展:
我所做的是使你的代碼更加簡潔和可擴展。
var query = TableNoTracking;
query = query
.Include(r => r.UserRoles).ThenInclude(o => o.Role)
.Include(c => c.Photos.Where(x => x.IsMain))
.Include(w => w.Wallets)。
if (!string.IsNullOrWhiteSpace(filterUser.SortBy.ToString()))
{
Func<Wallet, decimal> sortByToProperty = filterUser.SortBy switch。
{
UserNavigationPropsForSort.InventorySum => w => w.Inventory。
UserNavigationPropsForSort.InterMoneySum => w => w.InterMoney,
UserNavigationPropsForSort.ExitMoneySum => w => w.ExitMoney,
UserNavigationPropsForSort.OnExitMoneySum => w => w.OnExitMoney,
_ => throw new ArgumentOutOfRangeException()
};
query = filterUser.Reverse
? query.OrderByDescending(x => x.Wallets.Select(sortByToProperty).Sum())
: query.OrderBy(x => x.Wallets.Select(sortByToProperty).Sum())。
如果在任何時候,你想添加更多的屬性來排序,你可以擴展sortByToProperty開關。
請讓我知道這是否是你的意思。
uj5u.com熱心網友回復:
歸功于@nbokmans和@Svyatoslav Danyliv。我用Expression代替了Func,現在代碼正常了。
if (!string.IsNullOrWhiteSpace(filterUser.SortBy))
{
if (filterUser.SortableProperties.Any(x =>
string.Equals(x, filterUser.SortBy, StringComparison.CurrentCultureIgnoreCase)>)
{
Expression<Func<User, int>> exp = filterUser.SortBy switch。
{
UserNavigationPropsForSort.InventorySum => w => w.Wallets.Select(x => x.Inventory).Sum()。
UserNavigationPropsForSort.InterMoneySum => w => w.Wallets.Select(x => x.InterMoney).Sum()。
UserNavigationPropsForSort.ExitMoneySum => w => w.Wallets.Select(x => x.ExitMoney).Sum()。
UserNavigationPropsForSort.OnExitMoneySum => w => w.Wallets.Select(x => x.OnExitMoney).Sum()。
_ => throw new ArgumentOutOfRangeException()
};
query = filterUser.Reverse ? query.OrderByDescending(exp) : query.OrderBy(exp)。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/310074.html
標籤:
下一篇:Else陳述句永遠不會達到
