MVC中EF Core查询员工姓名调用ToString返回类型信息如何解决
问题原因
你编写的LINQ语句仅构造了查询表达式,返回的是IQueryable<string>类型的未执行查询对象,直接调用ToString()方法不会触发EF Core的数据库查询操作,只会返回该对象的类型全限定名,也就是你得到的Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable1[System.String]`内容。
解决方案
你需要调用EF Core提供的即时执行查询的方法,触发数据库查询获取实际的字段值,推荐以下几种写法:
- 优先使用
FirstOrDefault(),适配主键查询的场景,无匹配数据时返回null不会抛出异常:
string fullname = context.Employees .Where(e => e.EmployeeId == employeeId) .Select(f => f.FullName) .FirstOrDefault();
- 如果确认该employeeId必然存在对应的员工记录,可以使用
Single()/First(),无匹配数据时会抛出异常,适合数据合法性有前置校验的场景:
string fullname = context.Employees .Where(e => e.EmployeeId == employeeId) .Select(f => f.FullName) .Single();
- 简化写法:因为EmployeeId是Employees表的主键,可直接使用
Find()方法查询,写法更简洁:
string fullname = context.Employees.Find(employeeId)?.FullName;
注:上述代码中的?.是空值安全运算符,当查询不到对应员工时会直接返回null,避免触发空引用异常。
内容的提问来源于stack exchange,提问作者Paul Gigliotti
相关产品推荐
相关产品推荐

