Sql server 如何通过linq查询从表中仅获取两个字段?
我有一个.netcore(v3.1),我在其中安装了Microsoft SQL Server数据库提供程序nuget包,用于实体框架核心 我只想从数据库中获取两个字段 错误:严重性代码说明项目文件行抑制状态 错误CS0266无法隐式转换类型 “System.Linq.IQueryable” 到“ExampleAuth.Model.Employee”。存在显式转换(正在进行) 你错过了一个演员吗?) API是Sql server 如何通过linq查询从表中仅获取两个字段?,sql-server,linq,.net-core,entity-framework-core,Sql Server,Linq,.net Core,Entity Framework Core,我有一个.netcore(v3.1),我在其中安装了Microsoft SQL Server数据库提供程序nuget包,用于实体框架核心 我只想从数据库中获取两个字段 错误:严重性代码说明项目文件行抑制状态 错误CS0266无法隐式转换类型 “System.Linq.IQueryable” 到“ExampleAuth.Model.Employee”。存在显式转换(正在进行) 你错过了一个演员吗?) API是 [HttpGet] [Route("GetById/{id}&
[HttpGet]
[Route("GetById/{id}")]
public Employee GetById(int id)
{
if (id != 0)
{
return bl.GetById(id);
}
else
{
throw new Exception("! No Data Found");
}
}
有几件事。首先,您试图返回整个查询,而不是单个员工。其次,您正在创建
Employee
类的一个实例,而不是一个实例。您的代码应该如下所示:
var response = db.Employee
.Single(x => x.Id == id) // Use single to get an individual item
.Select(x => new Employee // Make a new Employee object
{
Name = x.Name,
Number = x.Number
});
现在response
包含一个Employee
对象。请注意,如果没有与该ID匹配的员工,这将引发异常,但这可能是一个好主意。您可以通过将Single
替换为SingleOrDefault
来处理此问题,请尝试下面的查询
var response = (from objEmp in db.Employee where objEmp.Id == id select new
{
Name = objEmp.Name,
Number = objEmp.Number
}).FirstOrDefault();
if(response != null)
{
response.Name // For access name
response.Number // For access number
}
我找到了解决办法。。。
它看起来像
public Employee GetById(int id)
{
var response = db.Employee
.Where(x => x.Id == id)
.Select(x => new Employee{Name = x.Name,Number = x.Number}).FirstOrDefault();
return response;
}
多亏了大家……是一种被许多产品支持的语言。你用哪一种?(可能是MS SQL Server?)用于实体框架核心的Microsoft SQL Server数据库提供程序。谢谢您,先生,我从您的回答中得到了一个解决方案
public Employee GetById(int id)
{
var response = db.Employee
.Where(x => x.Id == id)
.Select(x => new Employee{Name = x.Name,Number = x.Number}).FirstOrDefault();
return response;
}