如何通过linq查询只从表中获取两个字段



我有一个.net核心(v3.1),我在其中安装了Microsoft SQL Server实体框架核心的数据库提供程序nuget包。

我只想从数据库中获取两个feild?

错误:严重性代码描述项目文件行抑制状态错误CS0266无法隐式转换类型'System.Linq.IQUERABLE<lt;匿名类型:字符串名称,字符串编号>gt;'到"ExampleAuth.Model.Eemployee"。存在显式转换(分别为你错过了演员阵容?)

public Employee GetById(int id)
{
var response = db.Employee.Where(x => x.Id == id).Select(x => new{x.Name,x.Number});
return response;
}

API是…

[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匹配的员工,这将引发异常,但这可能是个好主意。您可以通过用SingleOrDefault替换Single来处理此问题。

我得到了解决方案。。。看起来像。。

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;
}

感谢大家。。。

尝试以下查询

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
}

最新更新