2016-05-17 16 views
0

我正在嘗試爲自動填充文本框創建一個Web API。我有API處理示例數據,但我不知道如何從我的表中添加數據。C#的Web API LINQ到SQL列表對象

這裏是我的控制器:

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 
+0

你的問題,目前還不清楚。如果你有你的IEnumerable的公司名稱,使用ajax調用你的控制器,並將其附加到你的客戶端使用javascript –

+0

它的工作原理。我不知道如何使用來自sql server的表格而不是示例數據。 – ChrisPasa

回答

0

這是我正在尋找的答案。

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


    } 
} 
+0

只要你知道,因爲你在dc.Companies上調用foreach,所以你每次都會在foreach中觸及數據庫,這意味着如果你有1000個公司,你需要1000次調用DB,那麼你將擁有通信的額外延遲。如果您使用的是EntityFramework,則會在數據庫中過濾哪些內容,因此您只需調用一次數據庫。如果你使用POCO將不得不編寫你的SQL Raw的一些地方,但你仍然只會調用數據庫一次 –

+0

我使用LINQ而不是實體框架。查詢字符串是僅從數據庫獲取一條記錄的參數。如果你有更好的方法,請告訴我。 LInq不是實體框架。 – ChrisPasa

+0

你的數據上下文應該有一個函數返回標量結果,如果它不需要創建一個或調用。創建一個查詢'dc.Query (「SELECT * FROM Companies WHERE name like'%'+ query +」%'「).ToList();' –

3

如果你想打電話給你的數據庫?我假設你的背景是基於的EntityFramework,如果是的話,你可以這樣做:

dc.Companies.Where(x => x.Name.Contains(query)).Select(x => new {x.id, x.Name}).ToList(); 

,請務必讓你的地方,當你抓住你的數據,否則你將抓住所有的公司和在內存中過濾他們這是一個額外的步驟。

0

爲了擺脫在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();