問題
我有一個IQueryable,我想根據角色來搜索它。一個用戶可以有多個角色,所以我希望能夠添加多個搜索條件(一個在另一個之上)。
public void OnGet()
{
var productionUnits = _context.ProductionUnits;
IQueryable query = productionUnits;
if (User.IsInRole(CustomRole.AdministratorUAP1))
{
query = productionUnits.Where(c => c.Id == (int)ProductionUnitEnum.UAP1) 。
}
if (User.IsInRole(CustomRole.AdministratorUAP2))
{
query = productionUnits.Where(c => c.Id == (int)ProductionUnitEnum.UAP2) 。
}
...
}
預期輸出
如果用戶有多個角色,例如UAP1和UAP2,我希望查詢能在Where子句中得到這兩個角色。有什么方法可以實作這一點嗎(我知道我可以做List.AddRange(),但我真的想用更新查詢來代替)。有什么方法可以實作這個目標嗎?
uj5u.com熱心網友回復:
我將為用戶建立一個角色串列,并在查詢中使用Contains:
var roleIds = new List<int>();
if (User.IsInRole(CustomRole.AdministratorUAP1))
{
roleIds.Add(ProductionUnitEnum.UAP1)。
}
if (User.IsInRole(CustomRole.AdministratorUAP2))
{
roleIds.Add(ProductionUnitEnum.UAP2)
}
var query = productionUnits.Where(c => roleIds.Contains(c.Id) )。
這將在你的查詢中為這兩個角色添加一個IN子。如果你有兩個以上的角色,只需將它們添加到串列中。
uj5u.com熱心網友回復:
每個Linq函式都會回傳一個IQueryable<>,所以只需不斷重復使用即可:
IQueryable<T> query = productionUnits; //注意<T>
if (User.IsInRole(CustomRole.AdministratorUAP1))
query = query.Where(c => c.Id == (int)ProductionUnitEnum.UAP1) 。
if (User.IsInRole(CustomRole.AdministratorUAP2))
query = query.Where(c => c.Id == (int)ProductionUnitEnum.UAP2) 。
如果用戶處于多個角色,例如UAP1和UAP2
那么你的資料庫從根本上就壞了,你是針對一個單一的欄位來檢查這些值。c.Id。一個數字不可能同時是兩個值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/310056.html
標籤:
上一篇:LINQ分組到同一收件人
