2010-12-14 10 views
0

Linqを使用して2つのデータオブジェクトを含むオブジェクトを作成しようとしています。 Linqの式から、私はオブジェクトを直接組み立てようとしています。LinqからMVCを使用している多くのオブジェクト

public class SupplierCategories 
{ 

    public category _category; 
    public category_sub _category_sub; 
    private bool _IsActive; 
    private int? _SupplierID; 

    public SupplierCategories() 
    { 

    } 

    public bool IsActive 
    { 
     get 
     { 
      return _IsActive; 
     } 
     set 
     { 
      _IsActive = value; 
     } 
    } 

    public int? SupplierID 
    { 
     get 
     { 
      return _SupplierID; 
     } 
     set 
     { 
      _SupplierID = value; 
      if (_SupplierID != null) // The county is active if there is a supplier ID matching 
      { 
       _IsActive = true; 
      } 
     } 

    } 
} 

注:カテゴリとcategory_subオブジェクトは、すべてのEntity Frameworkを使用して設定されている

含むクラスは次のようになります。

マイリンク式は、2つのテーブルを持っており、次のようになります。

public IEnumerable<SupplierCategories> GetAllOrdered() 
    { 
     IEnumerable<SupplierCategories> areaList; 

     var results = from cat in dbContext.categories 
         join sub in dbContext.category_sub on cat.id equals sub.categoryid 
         orderby cat.id ascending, sub.name ascending 
         select new SupplierCategories 
         { 
          _category = { new category { cat.id, cat.name } }, 
          _category_sub = { new category_sub { sub.id, sub.categoryid, sub.name } } 
         }; 

     areaList = results.ToList(); 

     return areaList; 
    } 

うまくいけば、あなたは私が直接「_category」と「_category_sub」オブジェクトを作成しようとしていますことがわかります。

私が手にエラーがある:それは 'System.Collections.IEnumerable' Dを実装していない ので

エラー5種類 'Essential_Collections.Models.category' コレクション初期化子で初期化できません:\ Webサイト\エッセンシャル コレクション\開発\ビルド\エッセンシャル コレクション\モデル\ SupplierCategories \ SupplierCategoriesRepository.cs 51 37エッセンシャルコレクション

任意の溶液またはおそらく他のアプローチは感謝

答えて

1

ので、余分な括弧を削除してください:

public IEnumerable<SupplierCategories> GetAllOrdered() 
{ 
    IEnumerable<SupplierCategories> areaList; 

    var results = from cat in dbContext.categories 
        join sub in dbContext.category_sub on cat.id equals sub.categoryid 
        orderby cat.id ascending, sub.name ascending 
        select new SupplierCategories() 
        { 
         _category = cat, 
         _category_sub = sub 
        }; 

    areaList = results.ToList(); 

    return areaList; 
} 
+0

おかげで非常に多く、正常に動作します。しかし、テーブルに直接マップしなかったオブジェクトを作成したい場合は、上記のような個別の値を指定できますか? – Billyhomebase

+0

@Billyhomebase:@BFreeは、カテゴリおよびcategory_subのオブジェクトコンストラクタで間違っていた場所を強調表示します。適切なコンストラクタを持っているか、または初期化しているプロパティを適切に識別すれば、そのオブジェクトに対して新しいオブジェクトをインスタンス化できます。 – Lazarus

+0

これが "うまくいく"場合は、答えとして受け入れることをお勧めします。 –

1

を受けたことになるあなたは、コンストラクタ呼び出しに括弧を逃した:

select new SupplierCategories() 
{ 
0
public IEnumerable<SupplierCategories> GetAllOrdered() 
{ 
    IEnumerable<SupplierCategories> areaList; 

    var results = from cat in dbContext.categories 
        join sub in dbContext.category_sub on cat.id equals sub.categoryid 
        orderby cat.id ascending, sub.name ascending 
        select new SupplierCategories 
        { 
         _category = new category { cat.id, cat.name } , //removed the curly braces here 
         _category_sub = new category_sub { sub.id, sub.categoryid, sub.name } //removed the curly braces here 
        }; 

    areaList = results.ToList(); 

    return areaList; 
} 

をあなたが取得しているエラーが原因で、私は削除これらの中括弧であります。

_category = new category { ID = cat.id, Name = cat.name } 

をしたり、カテゴリのクラスは、これらの引数を取るコンストラクタのオーバーロードを持つ場合、その中のものを渡します。これは、明示的に使用すると、オブジェクト初期化子に設定しているどのプロパティ綴るする必要があるため、まだコンパイルされません。

関連する問題