2011-09-05 22 views
3

私はテーブル名 "Product"と別のテーブル名 "category"を持っています。 製品表に「productID」、「productName」および「CategoryID」があります。 カテゴリテーブルに「categoryID」と「categoryName」があります。モデルをviewmodelに変換します

私の目標は、カテゴリのある製品のリストを表示することです。リストには、「製品ID」、「製品名」、「カテゴリ名」が表示されます。

私はビューモデルを作成しました。コードは私のコントローラで

public int prodID{get;set;} 
public int prodName{get;set;} 
public int catName{get;set;} 

で、私が持っている:

var query= from p in dc.Product 
         select new {p.ProductID,p.ProductName,p.Category1.CategoryName }; 
var prod = new ProductIndexViewModel() 
     { 
      ProductList=query //this line is problematic !!it says an explicit conversion exists.... 
     }; 
     return View(prod); 

それはのviewmodelと一致するように、どのように私は私のコントローラのコードを書くでしょう?

答えて

5

たぶん、あなたは直接あなたのビューモデルクラスを使用します。

 var query = from p in dc.Product 
        select new ProductIndexViewModel() { 
         prodID = p.ProductID, 
         prodName = p.ProductName, 
         catName = p.Category1.CategoryName 
        }; 

     List<ProductIndexViewModel> productForView = query.ToList(); 
+0

ありがとうございます。できます。 – kandroid

1

prodNamecatNameは文字列にする必要がありますか?

また、なぜこれだけをしない:

var viewModel = dc.Product 
    .ToList() 
    .Select(x => new ProductIndexViewModel { prodID = x.ProductId, ... } 

return View(viewModel); 
5

あなたはデシベルモデルからプロパティを書き換えるのではなく、AutoMapperを使用することができます。

var viewModel = new ProductIndexViewModel() 
{ 
    ProductList = dc.Product.ToList().Select(product => Mapper.Map<Product, ProductViewModel>(product)); 
} 
+0

私はWCFでAutomapperを使用していますが、エンティティモデルとデータ契約のモデルをマップできません。何をすべきですか?これは私が試したものです: 'requestDC = dbEntity.RequestDetails.ToList()。Select(req => Mapper.Map (req));' // dbEntity.RequestDetailsにアクセスできませんMapper.Map –

関連する問題