C# 如何:仅从WebAPI2和LINQ中的数据库检索选定的数据

C# 如何:仅从WebAPI2和LINQ中的数据库检索选定的数据,c#,sql-server,linq,entity-framework,asp.net-web-api,C#,Sql Server,Linq,Entity Framework,Asp.net Web Api,我正在使用实体框架和WebAPI2。使用EF,我创建了一个模型并生成了模型以获取代码。当我在浏览器中调用GetAll方法时,我得到的是整个数据结构(与其他实体的关系)。但我只想获得将显示在视图中的选定数据 下面是GetAll的代码: /* Entity: QR_Name */ /* propertys: Id, fname, lname, maxAge, groupId */ // GET: api/QR_Name public IQueryable<QR_Name> GetAllN

我正在使用实体框架和WebAPI2。使用EF,我创建了一个模型并生成了模型以获取代码。当我在浏览器中调用GetAll方法时,我得到的是整个数据结构(与其他实体的关系)。但我只想获得将显示在视图中的选定数据

下面是GetAll的代码:

/* Entity: QR_Name */
/* propertys: Id, fname, lname, maxAge, groupId */
// GET: api/QR_Name
public IQueryable<QR_Name> GetAllNames()
{
   return db.QR_Names;
}
/*实体:QR\U名称*/
/*属性:Id、fname、lname、maxAge、groupId*/
//获取:api/QR\U名称
公共IQueryable GetAllNames()
{
返回db.QR_名称;
}
当我只想得到实体的一个对象时,我还有另一个问题。此代码在浏览器中不起作用。我得到一份工作

错误消息:

提供的主键值数量必须与实体中定义的主键值数量匹配

错误类型:

“ExceptionType”:“System.ArgumentException”

这是Get id的代码:

// GET: api/QR_Name/5
[ResponseType(typeof(QR_Name))]
public async Task<IHttpActionResult> GetNameById(int id)
{
  QR_Name name = await db.QR_Names.FindAsync(id); //Here comes the exception
  if (name == null)
  {
     return NotFound();
  }

  return Ok(name);
}
//GET:api/QR\u Name/5
[响应类型(类型(QR_名称))]
公共异步任务GetNameById(int-id)
{
QR_Name Name=wait db.QR_Name.FindAsync(id);//出现异常
if(name==null)
{
返回NotFound();
}
返回Ok(名称);
}

您只传入FindAsync一个参数Id。您的类QR_名称的主键似乎包含多个列(请查看数据库)。例如Id和名称。在这种情况下,您应该使用两个参数(id和name)找到FindAsync方法数组的路径@yes。。我在这个实体中有2个主键<代码>Id,lname。。我如何定义这一点?我尝试过公共异步
任务GetNameById(int-id,string-lname){QR\u-Name=wait db.QR\u-Names.FindAsync(id,lname);
但不起作用。尝试
FindAsync(新对象[]{id,lname})
@我如何调用该对象?当我尝试调用
../api/qr\u name/1
时,什么都没有发生。我的意思是,如果您将lname参数添加到GetNameById方法并在FindAsync方法中使用它,那么(我想)这是web api路由问题。在您的情况下,它被配置为只接受一个参数,但您需要传递2(id和lname)。在这种情况下,请查看asp.net站点上的相应部分