2016-08-14 14 views
0

をLINQ to SQLの持つ複数のテーブルから選択します。私はこのようなクラス<code>Category</code>を持って

public int id { get; set; } 
public string catName { get; set; } 
public List<string> subCat { get; set; } 

そして、私は2つのテーブル、tblCategorytblSubCategoryを持っています。

各カテゴリのすべてのカテゴリとサブカテゴリを選択します。私は以下のコードを試していますが、いくつかのカテゴリにサブカテゴリがなくても、サブカテゴリの穴リストを取得しても、すべてのカテゴリで同じ結果が得られます。

ご協力いただければ幸いです。

public static List<Category> getCategoryList() 
{ 
    try 
    { 
     using (var db = new LinqToDBAwkoDataContext()) 
     { 
      var list = from c in db.tblCategories 
         select new Category 
          { 
           id = c.CatId, 
           catName = c.CatName, 
           subCat = subCategoriesByCatId(db) 
          }; 
      return list.ToList(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw new Exception("An error has occurred"); 
    }    
} 

private static List<string> subCategoriesByCatId(LinqToDBAwkoDataContext db) 
{ 
    var list = from s in db.tblSubCategories 
       join c in db.tblCategories on s.CatId equals c.CatId 
       where s.CatId == c.CatId 
       select s.SubCatName; 
    return list.ToList(); 
} 
+0

あなたの最初のヒントは、あなたの 'subCategoriesByCatId'メソッドが実際にカテゴリIDを受け入れないことです。そのメソッドでカテゴリIDを受け入れ、それをサブカテゴリクエリの 'where'句で使用する必要があります。また、サブカテゴリクエリでは結合は必要ありません。 –

+0

私は間違いを今見ます。答えではなく、あなたの答えをコメントにしてください。 –

答えて

1

いくつか間違いがあります。まず、subCategoriesByCatIdのメゾのすべてのカテゴリとサブカテゴリを選択します。このメソッドにはCatIdを渡す必要があります。しかしそれから、サブクエリが生成されます。私はあなたがそれを望むとは思わない。単純な結合を使用します。次にsubCategoriesByCatIdメソッドでToListに電話します。これにより、Categoriesテーブル内の各行のデータベースへのラウンドトリップが発生します。

public static List<Category> getCategoryList() 
{ 
    try 
    { 
     using (var db = new LinqToDBAwkoDataContext()) 
     { 
      var list = from c in db.tblCategories 
         join s in db.tblSubCategories 
         select new Category 
         { 
          id = c.CatId, 
          catName = c.CatName, 
          subCat = s.SubCatName 
         }; 
      return list.ToList(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw new Exception("An error has occured"); 
    }    
} 
+0

私はlist.ToList()を返さないと何を返すべきですか? getCategoryList()でsubCat = s.SubCatNameを選択することはできません。それは私にエラーが発生します:暗黙のうちに 'System.Collection.Generic.List 'への型 '文字列'を変換することはできません –

+0

あなたは上記のコードで何を得ることができます。それとも、私はあなたが望むものを理解していないかもしれません。もしそうなら、説明してください。 – Mahmoodvcs

関連する問題