2016-05-24 9 views
0

mvc4 web APIとlinqを使用して2つのテーブルを結合しようとしています。LINQを使用して2つのテーブルを結合する方法は?

これは、Catagoryテーブルのクラスコードです。

public partial class catagory 
{ 
    public int id { get; set; } 
    public string cat_name { get; set; } 
    public Nullable<int> measure_type { get; set; } 
    public Nullable<int> active { get; set; } 
    public Nullable<int> parent_cat { get; set; } 
    public Nullable<int> display_order { get; set; } 
    public string cat_image { get; set; } 
} 

製品テーブルのクラスのコード

public partial class product 
{ 
    public int id { get; set; } 
    public string p_name { get; set; } 
    public Nullable<int> price { get; set; } 
    public Nullable<int> catagory_id { get; set; } 
    public Nullable<int> brand_id { get; set; } 
    public Nullable<int> active { get; set; } 
    public Nullable<int> discount_percent { get; set; } 
    public Nullable<int> display_order { get; set; } 
    public Nullable<int> color_id { get; set; } 
    public Nullable<int> seller_id { get; set; } 
    public int selling_price { get; set; } 
} 

私はこの二つのテーブルに参加したいです。ここProductController.csのコードが

public class ProductController : ApiController 
{ 

    public List<product> GetProductByColour(int id) 
    { 
     var query = (from x in db.products.AsEnumerable() 
        join y in db.catagories.AsEnumerable() 
        on x.id equals y.id 
        where x.id.Equals(id) 
        select new product 
        { 
         id = x.id, 
         p_name = x.p_name, 
         price = x.price, 
         catagory_id = y.id, 
         brand_id = x.brand_id, 
         display_order = y.display_order, 

        }).ToList(); 
     return query.ToList(); 
    } 
+1

に従ってください? –

+0

実際にコードが実行され、return文の行にデバッガを置くと、 "Count = 0"として表示されます。 –

+0

私は2つのテーブルに参加したい。これは私のクエリです –

答えて

1

あなたが製品テーブルcatagory_idプロパティとカテゴリテーブルIdプロパティでこれらのテーブルの両方に参加する必要がありますファイルです、あなたのスキーマにこれだけは有効な関係を見えるので

し、着信variale Idは、商品ID、カテゴリIDのようなものでも、color_idでもかまいません。私にとっては、もっとcolor_idのようです。 LINQの詳細については

あなたが問題に直面しているされているもの。このlink

public class ProductController : ApiController 
    { 

     public List<product> GetProductByColour(int id) 
     { 
      var query = (from x in db.products.AsEnumerable() 
         join y in db.catagories.AsEnumerable() 
         on x.catagory_id equals y.id 
         where x.id.Equals(id) 
         select new product 
         { 
          id = x.id, 
          p_name = x.p_name, 
          price = x.price, 
          catagory_id = y.id, 
          brand_id = x.brand_id, 
          display_order = y.display_order, 

         }).ToList(); 
      return query; 
     } 
+0

EFとORMとの関係を扱う数が12ダース以上あれば、パフォーマンスが低下するため、これは悪い考えです。ジョインを使用することは、このクエリを今回*実行する場合でも非常に悪い考えです。単に列挙型を使用することで、このクエリは数十の行が追加されると停止します。 –

+0

合意しました。その理由は、linq MSDN記事のリンクを追加した理由です。より良いアプローチは、エンティティ間の関係を追加することであり、次に、必要に応じてそれらのエンティティを取得することができます。私はデータが非常に(1000行以上)高い場合、このように書くことを好みますが、ienumerableを実行することはありません。その代わりに私は私のカスタマイズされたオブジェクトの後にリストを行うことを好む。 –

+0

ありがとうございました。私は解決策を得た –

関連する問題