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;
}
感谢所有试图帮助我的人。
我正在为我的网站 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;
}
感谢所有试图帮助我的人。