2016-05-17 6 views
0

私はオートコンプリートテキストボックス用のWeb APIを作成しようとしています。サンプルデータを扱うAPIがありますが、テーブルからデータを追加する方法がわかりません。ここでC#web API linq to SQLリストオブジェクト

は私のコントローラです:あなたは、データベースを呼び出そうとした場合

ID    Name 
------------------------------------ 
1    Abc Company 
2    cde Company 
3    fgh Company 
4    ijk Company 
+0

ご質問、不明です。会社名のIEnumerableを持っている場合は、ajaxを使用してコントローラを呼び出し、javacript –

+0

を使用してクライアントに追加します。サンプルデータの代わりにSQL Serverからテーブルを使用する方法がわかりません。 – ChrisPasa

答えて

0

これは私が探していた答えです。

のforeachを取り除くために
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人の企業であれば、DBに1000回コールしているので、通信の余分な待ち時間。 EntityFrameworkを使用している場合は、どこでDBでフィルタリングされるので、DBを一度呼び出すだけです。使用しているPOCOがSQL Rawを記述しなければならない場合は、一度はDBを一度呼び出すだけです –

+0

私はlinqではなくエンティティフレームワークを使用しています。クエリ文字列は、データベースからレコードを1つだけ取得するパラメータです。あなたがより良い方法を持っているなら、私に見せてください。 LInqはエンティティフレームワークではありません。 – ChrisPasa

+0

データコンテキストにはスカラー結果を返す関数が必要です。スカラー結果を作成する必要がない場合はスカラー結果を返します。クエリを作成する 'dc.Query (「SELECT * * '%' + query + '%'」のような名前の企業).ToList();' –

3

:ここ

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

は、テーブル構造(名前は実際の会社名です)のですか? EntityFrameworkをベースにあなたがこれを行うことができます場合、私は、あなたの状況を想定しています:

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

あなたはあなたのデータをつかむときあなたはどこ呼び出すことを確認してくださいそうでなければ、企業の全てとメモリでそれらをフィルタリングするつかむだろう余分なステップです。

0

は(...アップタッチのビットを必要とする場合があります)次の操作を行い

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