为什么我收到错误消息运算符'||'不能应用于类型为 'bool' 和 'int' 的操作数



当我想将UserID传递给我的控制器并且对Ticket的访问受限时,我收到以下错误消息 因此,每个用户只能看到自己的工单,但Admin可以看到所有的工单。

var obj = _unitOfwork.Ticket.GetAll(filter: x => isAdministrator || x.UserId == account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser"); 

到目前为止,我尝试的是这样的:

方法 1

var obj = _unitOfwork.Ticket.GetAll(filter: x => isAdministrator || x.UserId = account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser"); 

方法 2

var obj = _unitOfwork.Ticket.GetAll(filter: (x => isAdministrator || x.UserId = account.FirstOrDefault().Id), includeProperties: "TicketType,ApplicationUser"); 

方法 3(当我使用这样的东西时,我会得到 x 作为不存在的上下文)

The name 'x' does not exist in the current context       
var obj = _unitOfwork.Ticket.GetAll(filter: (x => isAdministrator) || (x.UserId = account.FirstOrDefault().Id), includeProperties: "TicketType,ApplicationUser"); 

我不知道我在哪里犯了错误,我做错了什么,但无论我尝试什么,我总是收到错误消息。 我在这里检查了几个帖子

帖子 1

帖子 2

知道如何解决这个问题吗?

更新

这是我对这个函数的完整代码

public IActionResult GetAll()
{
var username = User.FindFirst(ClaimTypes.Name).Value;
var account = _unitOfwork.ApplicationUser.GetFirstOrDefault(a => a.UserName.Equals(username));
var isAdministrator = User.IsInRole("Admin");
var obj = _unitOfwork.Ticket.GetAll(filter: x => x.isAdministrator || x.UserId == account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");
return Json(new { data = obj });
}

在你的方法中,你使用了=而不是==,不像==是一个比较,有一个布尔结果=正在分配,其值是根据变量类型确定的,变量类型在你的情况下int(x.UserId)。 并且||只能应用于布尔类型:

(x => isAdministrator) || (x.UserId = account.FirstOrDefault().Id)
//-------boolean-------    ---int---

从你的初始代码中获取(并假设isAdministrator是一个布尔值)

var obj = _unitOfwork.Ticket.GetAll(filter: x => x.isAdministrator || x.UserId == account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");

最新更新