我正在尝试为自动完成文本框创建一个web API。我让API处理样本数据,但我不知道如何从表中添加数据。
这是我的控制器:
namespace IMDSEbs.Controllers
{
public class CompanyController : ApiController
{
// GET: api/Company/GetCompanyNames
IMDSDataContext dc = new IMDSDataContext();
public List<CompanyName> results = new List<CompanyName>
{
new CompanyName{ID = 1, Name = "Sonu Nigam"},
};
// GET api/values
public IEnumerable<CompanyName> GetCompanyNames(string query)
{
return results.Where(m => m.Name.Contains(query)).ToList();
}
}
}
以下是表格结构(名称实际上是公司名称):
ID Name
------------------------------------
1 Abc Company
2 cde Company
3 fgh Company
4 ijk Company
如果您试图调用数据库?我假设您的上下文是基于EntityFramework的,如果是这样,您可以这样做:
dc.Companies.Where(x => x.Name.Contains(query)).Select(x => new {x.id, x.Name}).ToList();
当你获取数据时,一定要打电话给你的位置,否则你会获取所有的公司,并在内存中过滤它们,这是一个额外的步骤。
这是我一直在寻找的答案。
namespace IMDSEbs.Controllers
{
public class CompanyController : ApiController
{
// GET api/values
public IEnumerable<CompanyName> GetCompanyNames(string query)
{
IMDSDataContext dc = new IMDSDataContext();
List<CompanyName> results = new List<CompanyName>();
foreach(IMDSEbs.Models.Company comp in dc.Companies)
{
results.Add(new CompanyName()
{
ID = comp.CompanyID,
Name = comp.CompanyName
});
}
return results.Where(m => m.Name.Contains(query)).ToList();
}
}
}
要去掉foreach,请执行以下操作(可能需要一点润色…)
return
//Get the Entities you need...
dc.Companies
//Narrow down what you are selecting...
.Where(m => m.Name.Contains(query))
//convert the entity into the object you need...
.Select(comp => new CompanyName(){
ID = comp.CompanyID,
Name = comp.CompanyName})
.ToList();