2011-09-05 3 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); 

어떻게 내 컨트롤러 코드를 작성합니다 ??

답변

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

당신은 DB 모델에서 속성을 다시 작성하는 대신 AutoMapper를 사용할 수 있습니다.

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

WCF에서 Automapper를 사용하고 있지만 Entity 모델을 데이터 계약 모델과 매핑 할 수 없습니다. 무엇을해야합니까 ?? 이것은 내가 시도한 것입니다 :'requestDC = dbEntity.RequestDetails.ToList(). Select (req => Mapper.Map (req));'// dbEntity.RequestDetails에 접근 할 수 없습니다. 아래 Mapper.Map –

관련 문제