C# 无法从 lambda 表达式中获取 class 属性 值

C# couldn't get class property value from lambda expression

我正在为我的网站 API 使用 ASP.NET Core 5 和 Entity Framework Core 制作 CRUD 服务。我正在尝试制作一种方法,该方法通过使用 lambda 表达式选择的某些值从数据库中获取一个用户。问题是我无法获得正在与用户模型的值进行比较的 class 的 属性 的值。

方法代码为:

public async Task<UserModel> FindOne(Expression<Func<UserModel, bool>> predicate)
{
    var candidates = await _context.Users.Where(predicate).ToListAsync();
    var user = candidates.First();
    return user;
}

下面是我如何调用 FindOne 方法:

[HttpPost("register")]
public async Task<ActionResult<UserLoginResponseModel>> RegisterUser(UserRegisterRequestModel requestModel)
{
    var model = new UserModel(requestModel);
    var email = model.Email;

    var candidate = await _service.FindOne(u => u.Email == email);
            
    if (candidate is not null)
    {
        return BadRequest($"User with email {model.Email} is already registered");
    }

    // continuation of the code

}   

我调试了我的程序,predicate lambda 表达式中 model.Email 的值为:

value(.Constant<API.Controllers.UserController+<>c__DisplayClass4_0>(API.Controllers.UserController+<>c__DisplayClass4_0).model).Email

但是如果我硬编码 model.Email 的值,一切都会起作用。

Entity Framework核心版本:5.0.12

我不知道如何修复它。如果有人能帮助我,那就太好了。

答案是我必须使用 FirstOrDefaultAsync() 而不是 FirstAsync():

public async Task<UserModel> FindOne(Expression<Func<UserModel, bool>> predicate)
{

    var user = await _context.Users.Where(predicate).FirstOrDefaultAsync();
    return user;

}

感谢所有试图帮助我的人。