我正在使用 ASP.NET Core 5 和 Entity Framework Core 為我的 Web API 制作一個 CRUD 服務。我正在嘗試創建一種方法,該方法通過使用 lambda 運算式選擇的某些值從資料庫中獲取一個用戶。問題是我無法獲得與用戶模型值進行比較的類的屬性值。
方法代碼為:
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
}
我除錯了我的程式,model.Email在predicatelambda 運算式中的值為:
value(.Constant<API.Controllers.UserController <>c__DisplayClass4_0>(API.Controllers.UserController <>c__DisplayClass4_0).model).Email
但是如果我對 的值進行硬編碼model.Email,一切都會正常。
物體框架核心版本: 5.0.12
我不知道如何修復它。如果有人可以幫助我,那就太好了。
uj5u.com熱心網友回復:
答案是我必須使用FirstOrDefaultAsync()而不是FirstAsync():
public async Task<UserModel> FindOne(Expression<Func<UserModel, bool>> predicate)
{
var user = await _context.Users.Where(predicate).FirstOrDefaultAsync();
return user;
}
感謝所有試圖幫助我的人。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/380494.html
