5

次の 2 つのテーブルがあります (基本的な概要)。

Tbl_CategoryType

ID レベルID 説明

Tbl_Levels ID 名

基本的には、Tbl_CategoryType.LevelID 番号に基づいて Tbl_Levels.Name データを参照しながら、Tbl_CategoryType テーブル内のすべての情報を提示したいと考えています。

以下のように、リポジトリで結合を使用してみました。

public IQueryable GetAllTypesInCategory(int CatID)
{
     return (from x in DBEntities.LU_LST_CategoryTypeSet
             where x.CategoryID == CatID && x.Enabled == 1
             join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID
             select new {x, y});
}

ただし、そのメソッドを呼び出すと、カテゴリまたはレベルのタイプに適合しないため、割り当てることができるタイプがありません。

カスタムビューモデルを介してこれを行う必要があると想定していますが、手順がわかりません。

前もって感謝します

4

2 に答える 2

4

linq ステートメントで次の行を使用すると、次のようになります。

select new {x, y}

エンティティ型とは異なる型である新しい匿名型を作成しています。

外部キー関係を自動的に解決してリンクされたエンティティを作成する EntityFramework やその他の重いフレームワークを使用していないと思います。true の場合、はい、ViewModel を作成する必要があります。

各エンティティの 1 つをプロパティとして含む単純なラッパー クラスを作成するだけです。

public class MyViewModel
{
    public MyViewModel(LU_LST_CategoryTypeSet x, LU_LST_LevelSet y)
    {
        Category = x;
        Level = y;
    }

    public LU_LST_CategoryTypeSet Category { get; set;}
    public LU_LST_LevelSet Level { get; set; }
}

次に、Linq ステートメントで、匿名型を作成する代わりに、MyViewModel 型を作成します。

public IQueryable GetAllTypesInCategory(int CatID)
{
     return (from x in DBEntities.LU_LST_CategoryTypeSet
             where x.CategoryID == CatID && x.Enabled == 1
             join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID
             select new {x, y});
}

次に、結果をモデル クラスにコピーします。

   var listOfTypes = GetAllTypesInCategory(catID);
   foreach (var item in listOfTypes)
   {
      var model = new MyViewModel(item.x, item.y);

      //Do whatever with the model to get it to the view.
   }

View を MyViewModel から継承させます。

于 2010-01-06T07:49:35.847 に答える
3

2 つのエンティティ間に関連付けがある場合は、それを使用して 2 番目のタイプにアクセスできます。その場合に行う必要があるのは、Include() メソッドを使用して関連付けデータをロードすることだけです。

       public List<LU_LST_CategoryType> GetAllTypesInCategory(int CatID)  
         { 
             return (from x in DBEntities.LU_LST_CategoryTypeSet.Include("LU_LST_LevelSet") 
                     where x.CategoryID == CatID && x.Enabled == 1  
                     select x).ToList(); 
         }

LU_LST_CategoryTypeSet categoryあなたが呼び出すことができるすべてのよりもcategory.LU_LST_Level

于 2010-01-06T08:02:20.140 に答える